orlyapps/laravel-favorite

Laravel应用程序的用户收藏功能。

3.0 2020-09-21 08:21 UTC

This package is auto-updated.

Last update: 2024-09-21 17:11:27 UTC


README

❤️ Laravel应用程序的用户收藏功能。

CI

安装

$ composer require overtrue/laravel-favorite -vvv

配置

此步骤是可选的

$ php artisan vendor:publish --provider="Overtrue\\LaravelFavorite\\FavoriteServiceProvider" --tag=config

迁移

此步骤也是可选的,如果您想自定义收藏夹表,可以发布迁移文件

$ php artisan vendor:publish --provider="Overtrue\\LaravelFavorite\\FavoriteServiceProvider" --tag=migrations

使用方法

特质

Overtrue\LaravelFavorite\Traits\Favoriter

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Overtrue\LaravelFavorite\Traits\Favoriter;

class User extends Authenticatable
{
    use Favoriter;
    
    <...>
}

Overtrue\LaravelFavorite\Traits\Favoriteable

use Illuminate\Database\Eloquent\Model;
use Overtrue\LaravelFavorite\Traits\Favoriteable;

class Post extends Model
{
    use Favoriteable;

    <...>
}

API

$user = User::find(1);
$post = Post::find(2);

$user->favorite($post);
$user->unfavorite($post);
$user->toggleFavorite($post);
$user->getFavoriteItems(Post::class)

$user->hasFavorited($post); 
$post->isFavoritedBy($user); 

获取对象收藏者

foreach($post->favoriters as $user) {
    // echo $user->name;
}

从用户获取收藏模型。

使用收藏者特质模型可以轻松获取收藏模型以执行您想要的操作。 *注意:此方法将返回一个 Illuminate\Database\Eloquent\Builder *

$user->getFavoriteItems(Post::class);

// Do more
$favortePosts = $user->getFavoriteItems(Post::class)->get();
$favortePosts = $user->getFavoriteItems(Post::class)->paginate();
$favortePosts = $user->getFavoriteItems(Post::class)->where('title', 'Laravel-Favorite')->get();

聚合

// all
$user->favorites()->count(); 

// with type
$user->favorites()->withType(Post::class)->count(); 

// favoriters count
$post->favoriters()->count();

使用 *_count 属性列出

$users = User::withCount('favorites')->get();

foreach($users as $user) {
    echo $user->favorites_count;
}

N+1 问题

为了避免N+1问题,您可以使用预加载来将此操作减少到仅2个查询。查询时,您可以使用 with 方法指定应预加载哪些关系

// Favoriter
$users = App\User::with('favorites')->get();

foreach($users as $user) {
    $user->hasFavorited($post);
}

// Favoriteable
$posts = App\Post::with('favorites')->get();
// or 
$posts = App\Post::with('favoriters')->get();

foreach($posts as $post) {
    $post->isFavoritedBy($user);
}

事件

相关包

贡献

您可以通过以下三种方式之一进行贡献

  1. 使用 问题跟踪器 提交错误报告。
  2. 问题跟踪器 上回答问题或修复错误。
  3. 贡献新功能或更新wiki。

代码贡献过程并不十分正式。您只需确保遵循PSR-0、PSR-1和PSR-2编码指南。任何新的代码贡献都必须附带适用的单元测试。

PHP 扩展包开发

想知道如何从头开始构建PHP扩展包吗?

请关注我的实战课程,我将在该课程中分享一些扩展开发经验 —— 《PHP 扩展包实战教程 - 从入门到发布》

许可

MIT