79 lines
1.9 KiB
PHP
79 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Notifications\Notifiable;
|
|
use Illuminate\Foundation\Auth\User as Authenticatable;
|
|
|
|
class Customers extends Authenticatable
|
|
{
|
|
use Notifiable;
|
|
|
|
protected $guard = 'customer';
|
|
|
|
public function recipes()
|
|
{
|
|
return $this->belongsToMany(Recipes::class, 'customers_recipes', 'customer_id', 'recipe_id');
|
|
}
|
|
|
|
public function products()
|
|
{
|
|
return $this->belongsToMany(Products::class, 'cart', 'customer_id', 'product_id');
|
|
}
|
|
|
|
public function forums()
|
|
{
|
|
return $this->hasMany(Forum::class);
|
|
}
|
|
|
|
public function answers()
|
|
{
|
|
return $this->hasMany(ForumAnswers::class);
|
|
}
|
|
|
|
public function notifications_read() {
|
|
return $this->belongsToMany(Notifications::class, 'notifications_read', 'customer_id', 'notification_id');
|
|
}
|
|
|
|
/**
|
|
* Check if Customer has a recipe in favorites
|
|
*
|
|
* @param Recipes $recipe
|
|
* @return boolean
|
|
*/
|
|
public function hasRecipe(Recipes $recipe)
|
|
{
|
|
return $this->recipes()->find($recipe) ? true : false;
|
|
}
|
|
|
|
/**
|
|
* Set the rating for this customer
|
|
*
|
|
* @param Recipes $recipe
|
|
* @return float|null
|
|
*/
|
|
public function getRecipeRating(Recipes $recipe)
|
|
{
|
|
$recipe = $this->recipes()->withPivot('rating')->find($recipe);
|
|
return $recipe->pivot->rating ?? null;
|
|
}
|
|
|
|
/**
|
|
* Set the rating for this customer
|
|
*
|
|
* @param Recipes $recipe
|
|
* @param float $rating
|
|
* @return bool
|
|
*/
|
|
public function setRecipeRating(Recipes $recipe, float $rating)
|
|
{
|
|
/** @var \Illuminate\Database\Eloquent\Relations\Pivot $p */
|
|
$p = $this->recipes()->find($recipe);
|
|
if (!$p) {
|
|
return (bool)count($this->recipes()->syncWithoutDetaching([$recipe->id => ['rating' => $rating]]));
|
|
} else {
|
|
$p->pivot->rating = $rating;
|
|
return $p->save();
|
|
}
|
|
}
|
|
}
|