servnx / getcandy-favorites
GetCandy 2 收藏插件
v1.0-beta.4
2022-04-15 01:21 UTC
Requires
- getcandy/core: ^2.0-beta
Requires (Dev)
- cartalyst/converter: ^6.1|^7.0
- kalnoy/nestedset: ^6.0
- orchestra/testbench: ^6.0|^7.0
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-15 06:50:29 UTC
README
GetCandy 2 应用程序的收藏插件。
安装
composer require servnx/getcandy-favorites
发布配置和迁移(可选)
php artisan vendor:publish --tag="getcandy-favorites"
运行迁移
php artisan migrate
向 GetCandy 管理中心添加屏幕(可选)
如果您已安装管理中心,可以通过发布上述配置并将 hub 值设置为 true(默认为 false)来启用屏幕。
/* * If you have GetCandy Admin Hub installed set this to true (default is false). */ 'hub' => true,
收藏者
收藏者 是那些正在收藏对象的 用户。
将 收藏者特征 添加到您希望的用户模型。
use Servnx\GetCandyFavorite\Traits\Favoriter; class User extends Authenticatable { use HasFactory, GetCandyUser, Favoriter, Billable, Notifiable; ... }
用法
支持的 GetCandy 收藏模型。
GetCandy\Models\Product::class ... more to come ...
将可收藏添加到您自己的模型。
use Illuminate\Database\Eloquent\Model; use Servnx\GetCandyFavorite\Traits\Favoriteable; class Post extends Model { use Favoriteable; ... }
API
$user = User::find(1); $product = Product::find(2); $user->favorite($product); $user->unfavorite($product); $user->toggleFavorite($product); $user->getFavoriteItems(Product::class) $user->hasFavorited($product); $product->hasBeenFavoritedBy($user);
获取收藏者示例
foreach($product->favoriters as $user) { ... }
从用户获取收藏模型。
这将返回一个 Illuminate\Database\Eloquent\Builder 实例。
$favoriteItems = $user->getFavoriteItems(Product::class); // more examples $favoriteItems->get(); $favoriteItems->paginate(); $favoriteItems->find(1)->get();
聚合
// all favorites by this user $user->favorites->count(); // how many Products has this user favorited ? $user->favorites()->withType(Product::class)->count(); // how many users favorited this product ? $product->favoriters->count();
使用 *_count 属性列出
$users = User::withCount('favorites')->get(); foreach($users as $user) { echo $user->favorites_count; } // for Favoriteable models: $products = Product::withCount('favoriters')->get(); foreach($products as $product) { echo $product->favoriters_count; }
将用户收藏状态附加到可收藏集合
您可以使用 Favoriter::attachFavoriteStatus($favoriteables) 附加用户收藏状态,它将为 $favoriteables 中的每个模型设置 has_favorited 属性
对于 模型
$product = Product::find(1); $product = $user->attachFavoriteStatus($product); $product->toArray(); // example result [ "id" => 1 ... "has_favorited" => true ],
对于 Collection | Paginator | LengthAwarePaginator | 数组
$products = Product::oldest('id')->get(); $products = $user->attachFavoriteStatus($products); $products->toArray(); // example result [ [ "id" => 1 ... "has_favorited" => true ], [ "id" => 2 ... "has_favorited" => false ], [ "id" => 3 ... "has_favorited" => true ], ]
N+1 问题
为了避免 N+1 问题,您可以使用预加载将此操作减少到仅 2 次查询。查询时,您可以使用 with 方法指定应该预加载哪些关系
// Favoriter $users = User::with('favorites')->get(); // Favoriteable $products = Product::with('favorites')->get(); $products = Product::with('favoriters')->get();
事件
许可
MIT