sukohi/evaluation

一个用于管理评价数据的 Laravel 扩展包,如 LIKE、DISLIKE、FAVORITE 和 REMEMBER。

4.0.5 2017-10-03 09:48 UTC

README

一个用于管理评价数据的 Laravel 扩展包,如 LIKE、DISLIKE、FAVORITE 和 REMEMBER。(此包在 L5.5 下维护。)

安装

执行以下 composer 命令。

composer require sukohi/evaluation:4.*

在 app.php 中注册服务提供者。
如果你在 L5.5+,你不需要上面的步骤。

'providers' => [
    //...Others...,  
    Sukohi\Evaluation\EvaluationServiceProvider::class,
]

准备工作

要为这个包创建一个表,请执行以下命令。

php artisan vendor:publish --provider="Sukohi\Evaluation\EvaluationServiceProvider"

php artisan migrate

使用

如此将 EvaluationTrait 添加到您的模型中。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Sukohi\Evaluation\EvaluationTrait;

class Item extends Model
{
    use EvaluationTrait;
}

现在,您可以使用 EvaluationTrait 中的新方法。

喜欢

$item = \App\Item::find(1);

/*  Add `like`  */
$item->like($user_id);  // You also can set empty ID.

/*  Remove `like`  */
$item->unlike($user_id);
$item->unlike(['user_id' => $user_id]);
$item->unlike(['ip' => $ip]);
$item->unlike(['user_agent' => $user_agent]);

/*  Remove all `like`s  */
$item->clearLike();

/*  Has  */
$item->hasLike($user_id)    // True or False
$item->hasLike(['user_id' => $user_id]);
$item->hasLike(['ip' => $ip]);
$item->hasLike(['user_agent' => $user_agent]);

/*  Count  */
echo $item->like_count;

不喜欢

$item = \App\Item::find(1);

/*  Add `dislike`  */
$item->dislike($user_id);  // You also can set empty ID.

/*  Remove `dislike`  */
$item->undislike($user_id);
$item->undislike(['user_id' => $user_id]);
$item->undislike(['ip' => $ip]);
$item->undislike(['user_agent' => $user_agent]);

/*  Remove all `dislike`s  */
$item->clearDislike();

/*  Has  */
$item->hasDislike($user_id)    // True or False
$item->hasDislike(['user_id' => $user_id]);
$item->hasDislike(['ip' => $ip]);
$item->hasDislike(['user_agent' => $user_agent]);

/*  Count  */
echo $item->dislike_count;

收藏

$item = \App\Item::find(1);

/*  Add `favorite`  */
$item->favorite($user_id);  // You need to set user ID.

/*  Remove `favorite`  */
$item->unfavorite($user_id);
$item->unfavorite(['user_id' => $user_id]);
$item->unfavorite(['ip' => $ip]);
$item->unfavorite(['user_agent' => $user_agent]);

/*  Remove all `favorite`s  */
$item->clearFavorite();

/*  Has  */
$item->hasFavorite($user_id)    // True or False
$item->hasFavorite(['user_id' => $user_id]);
$item->hasFavorite(['ip' => $ip]);
$item->hasFavorite(['user_agent' => $user_agent]);

/*  Count  */
echo $item->favorite_count;

记住

$item = \App\Item::find(1);

/*  Add `remember`  */
$item->remember($user_id);  // You need to set user ID.

/*  Remove `remember`  */
$item->unremember($user_id);
$item->unremember(['user_id' => $user_id]);
$item->unremember(['ip' => $ip]);
$item->unremember(['user_agent' => $user_agent]);

/*  Remove all `remember`s  */
$item->clearRemember();

/*  Has  */
$item->hasRemember($user_id)    // True or False
$item->hasRemember(['user_id' => $user_id]);
$item->hasRemember(['ip' => $ip]);
$item->hasRemember(['user_agent' => $user_agent]);

/*  Count  */
echo $item->remember_count;

条件查询

$user_id = 1;
$ip = request()->ip();
$user_agent = request()->userAgent();

// Like
$items = \App\Item::whereHasLike()->get();
$items = \App\Item::whereHasLike($user_id)->get();
$items = \App\Item::whereHasLike(['user_id' => $user_id])->get();
$items = \App\Item::where('id', 1)->orWhereHasLike(['user_id' => $user_id])->get();
$items = \App\Item::where('id', 1)->orWhereHasLike(['ip' => $ip])->get();
$items = \App\Item::where('id', 1)->orWhereHasLike(['user_agent' => $user_agent])->get();

// Dislike
$items = \App\Item::whereHasDislike()->get();
$items = \App\Item::whereHasDislike($user_id)->get();
$items = \App\Item::whereHasDislike(['user_id' => $user_id])->get();
$items = \App\Item::where('id', 1)->orWhereHasDislike(['user_id' => $user_id])->get();
$items = \App\Item::where('id', 1)->orWhereHasDislike(['ip' => $ip])->get();
$items = \App\Item::where('id', 1)->orWhereHasDislike(['user_agent' => $user_agent])->get();

// Favorite
$items = \App\Item::whereHasFavorite()->get();
$items = \App\Item::whereHasFavorite($user_id)->get();
$items = \App\Item::whereHasFavorite(['user_id' => $user_id])->get();
$items = \App\Item::where('id', 1)->orWhereHasFavorite(['user_id' => $user_id])->get();
$items = \App\Item::where('id', 1)->orWhereHasFavorite(['ip' => $ip])->get();
$items = \App\Item::where('id', 1)->orWhereHasFavorite(['user_agent' => $user_agent])->get();

// Remember
$items = \App\Item::whereHasRemember()->get();
$items = \App\Item::whereHasRemember($user_id)->get();
$items = \App\Item::whereHasRemember(['user_id' => $user_id])->get();
$items = \App\Item::where('id', 1)->orWhereHasRemember(['user_id' => $user_id])->get();
$items = \App\Item::where('id', 1)->orWhereHasRemember(['ip' => $ip])->get();
$items = \App\Item::where('id', 1)->orWhereHasRemember(['user_agent' => $user_agent])->get();

$type = 'like'; // like, dislike, favorite or remember
    
// And
$items = \App\Item::whereHasEvaluations($type)->get();
$items = \App\Item::\App\Music::whereHasEvaluations($type, ['user_id' => $user_id])->get();
$items = \App\Item::\App\Music::whereHasEvaluations($type, ['ip' => $ip])->get();
$items = \App\Item::\App\Music::whereHasEvaluations($type, ['user_agent' => $user_agent])->get();

// Or
$items = \App\Item::where('id', 1)->orWhereHasEvaluations($type)->get();
$items = \App\Item::where('id', 1)->orWhereHasEvaluations($type, ['user_id' => $user_id])->get();
$items = \App\Item::where('id', 1)->orWhereHasEvaluations($type, ['ip' => $ip])->get();
$items = \App\Item::where('id', 1)->orWhereHasEvaluations($type, ['user_agent' => $user_agent])->get();
  • 此功能来自 hikernl。感谢!

排序子句

$direction = 'asc'; // or desc
\App\Item::orderByLike($direction)->get();
\App\Item::orderByDislike($direction)->get();
\App\Item::orderByFavorite($direction)->get();
\App\Item::orderByRemember($direction)->get();

// or

\App\Item::orderByEvaluation('like', $direction)->get();
\App\Item::orderByEvaluation('dislike', $direction)->get();
\App\Item::orderByEvaluation('favorite', $direction)->get();
\App\Item::orderByEvaluation('remember', $direction)->get();

重复

如果您想允许用户添加重复的评价点,请使用以下方法。

$music->allowEvaluationDuplications([
    'user_id' => false,
    'ip' => false,
    'user_agent' => true,
]);

// or

$item->allowEvaluationDuplicationByUserId($boolean);      // Default: false

$item->allowEvaluationDuplicationByIpAddress($boolean);   // Default: false

$item->allowEvaluationDuplicationByUserAgent($boolean);   // Default: true

注意:由于 favoriteremember 应该只有评价点,所以它们不能重复用户 ID。

许可证

此包根据 MIT 许可证授权。

版权所有 2017 Sukohi Kuhoh