larastash / reviews
Laravel 的 Eloquent 模型评论。
Requires
- php: ^8.1
- illuminate/database: ^10.0
This package is auto-updated.
Last update: 2024-09-18 16:48:02 UTC
README
Larastash Reviews 包是一个强大的 Laravel 扩展包,它允许您为 Eloquent 模型添加评论功能。
使用此包,您可以轻松管理各种可评论实体的评论,并执行各种与评论相关的操作。
要求
- Laravel ^10;
- PHP ^8.1;
安装
要安装 Larastash Reviews 包,您可以使用 Composer
composer require larastash/reviews
安装包后,发布迁移和配置文件
php artisan vendor:publish --tag="larastash:reviews"
注意 如果您的用户模型使用 UUID,您可以编辑迁移并设置
foreignUuid
。
准备模型
要使用 Larastash Reviews 包,您需要将 Reviewable
特性应用到您想要使其可评论的 Eloquent 模型上。
namespace App\Models; ... use Larastash\Reviews\Concerns\Reviewable; class Product extends Model { use Reviewable; ... }
此外,您还可以将 Reviewer
特性应用到 User 模型上。
namespace App\Models; ... use Larastash\Reviews\Concerns\Reviewer; class User extends Model { use Reviewer; ... }
使用方法
以下示例演示了使用 Laravel 包管理评论的方法。
review($product) $product->review();
review($product)
:为给定的$product
创建一个新的Larastash\Reviews\Review
实例。它返回一个Larastash\Reviews\Review
实例。$product->review()
:创建给定的$product
的另一种方式Larastash\Reviews\Review
实例。它也返回一个Larastash\Reviews\Review
实例。
创建或更新 $product
实体的评论,并使用提供的值。参数 $value
、$body
、$title
、$extra
和 $userId
用于设置评论的属性。
$product->review($value, $body, $title, $extra, $userId);
发布评论
要创建新的评论(底层使用 updateOrCreate
),请使用 publish
方法。
review($product)->publish(5); // only value review($product)->publish(5, 'I love it!'); // value & body review($product)->publish(5, 'I love it!', 'Awesome'); // value, body & title review($product)->publish(5, title: 'Awesome'); // value & title
附加数据
您可以将额外的数据传递给评论,例如批准、匿名评论、推荐等。
review($product)->extra(['approved' => false, 'recommended' => 1])->publish(5);
review($product)->with('approved', false)->with('recommended', 1)->publish(5);
注意 您还可以处理此数据,例如选择平均额外值或仅获取已批准的评论。
另一个用户(评论者)
以另一个用户身份发布评论。
review($product)->as(User::find(1337))->publish(5); review($product)->as(1337)->publish(5);
注意 默认情况下,概述由当前授权用户(通过
Auth::id()
)拥有。
更新评论
有时,当我们有一些额外数据时,例如我们需要仅更改 approved
,那么我们可以使用 update
方法。
review($product)->with('approved', true)->update(5);
review($product)->by(User::find(1337))->with('approved', true)->update(5); review($product)->by(1337)->with('approved', true)->update(5);
它将更改 approved
的值到 true
,并且不会影响其他额外数据,例如 recommended
。
当然,您可以使用 publish
方法来更新评论。但那时您需要传递完整的当前额外数据,而不仅仅是 approved = true
。
用户有评论
检查用户是否有评论。
review($product)->exists();
review($product)->by(User::find(1337))->exists(); review($product)->by(1337)->exists();
删除评论
删除用户的评论。
review($product)->delete();
review($product)->by(User::find(1337))->delete(); review($product)->by(1337)->delete();
评论总数
获取条目的评论总数。
review($product)->total();
平均值和额外数据
获取评论的平均值。
review($product)->avg(); review($product)->avg(precision: 0); // 2 by default
获取评论的平均额外值。
review($product)->avg('recommended'); review($product)->avg('recommended', 0); // precision is 2 by default
可评论查询构建器
获取评论查询构建器实例。
review($product)->query()->doSomething();
预加载
$product = Product::with('reviews');
相关可评论方法
$product = Product::withReviewAvgValue(); $product->reviews_avg_value;
Product::orderByReviewValue();
Product::orderByReviewValueDesc();
$product = Product::withReviewAvgExtra('recommended')->first(); $product->reviews_avg_extra_recommended;
Product::orderByReviewExtra('recommended');
Product::orderByReviewExtraDesc('recommended');
use App\Models\Product; use Larastash\Reviews\Models\Review; Review::withType(Product::class)->count();
获取用户评论
如果您将 Larastash\Reviews\Concerns\Reviewer
特性添加到 User
模型中,这将可用。
auth()->user()->reviews;
辅助工具
review()
该函数review
是由Laravel包提供的辅助函数。
它为给定的可评审实体(使用Reviewable
特性的模型)创建一个新的Larastash\Reviews\Review
实例。此函数特别有用,当您想与特定模型实例的Review
类的相关方法交互时。它可以在每次需要执行与特定实体相关的评审操作时,避免手动创建新的Review
实例。
测试
$ composer test
贡献
如果您发现任何问题或有改进建议,请随时通过创建拉取请求或提交问题来贡献。
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。