CanFavorite.php 2.0 KB
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
 * trait :对象可以 收藏 trait
+-----------------------------------------------------------------------------------------------------------------------
 *
 * PHP version 7
 *
 * @category  App\Models\Traits
 * @package   App\Models\Traits
 * @author    Richer <yangzi1028@163.com>
 * @date      2021年12月23日09:49:43
 * @copyright 2021-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
namespace App\Models\Traits;

use App\Models\Favorite;
use Illuminate\Database\Eloquent\Relations\HasMany;

/**
 * Trait CanFavorite.
 *
 * @category  App\Models\Traits
 * @package   App\Models\Traits
 * @author    Richer <yangzi1028@163.com>
 * @date      2021年12月23日09:49:43
 * @copyright 2021-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
trait CanFavorite
{
    /**
     * Favorite an item or items.
     *
     * @param $model
     * @return array
     */
    public function favorite($model)
    {
        return $result = $model->favoriters()->create([
            'user_id' => $this->id,
            'shop_id' => $model->shop_id ?? $model->id, // add by Richer 于 2022年2月16日16:50:54 便于按照企业分组查询
        ]);
    }

    /**
     * Unfavorite an item or items.
     *
     * @param $model
     * @return array
     */
    public function unfavorite($model)
    {
        return $model->favoriters()->where('user_id', $this->id)->delete();
    }

    /**
     * Check if user is favorited given item.
     *
     * @param $model
     * @return bool
     */
    public function hasFavorited($model)
    {
        return $model->favoriters()->where('user_id', $this->id)->exists();
    }

    /**
     * Return item favorites.
     *
     * @return HasMany
     */
    public function favorites():hasMany
    {
        return $this->hasMany(Favorite::class);
    }
}