larastash/reviews

Laravel 的 Eloquent 模型评论。

1.0.0 2023-07-18 11:01 UTC

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)。有关更多信息,请参阅许可证文件