zepson / laravel-bookmark
Laravel 书签
v1.1.0
2021-02-20 22:59 UTC
Requires
- laravel/framework: ^5.5||~6.0||~7.0||~8.0
Requires (Dev)
- captainhook/captainhook: ^5.3
- captainhook/plugin-composer: ^5.2
- friendsofphp/php-cs-fixer: ^2.16
- orchestra/testbench: ^5.0
- phpunit/phpunit: ~8.0
- ramsey/conventional-commits: dev-master
This package is auto-updated.
Last update: 2024-09-21 07:01:26 UTC
README
为 Laravel 应用提供用户书签功能。
安装
$ composer require trendsoft/laravel-bookmark -vvv
配置
此步骤是可选的
$ composer artisan vendor:publish --provider="Trendsoft\\LaravelBookmark\\BookmarkServiceProvider" --tag=config
迁移
此步骤也是可选的,如果您想自定义书签表,可以发布迁移文件
$ composer artisan vendor:publish --provider="Trendsoft\\LaravelBookmark\\BookmarkServiceProvider" --tag=migrations
使用方法
特质
Trendsoft\LaravelBookmark\Traits\Bookmarker
use Illuminate\Database\Eloquent\Model; use Trendsoft\LaravelBookmark\Traits\Bookmarker; class User extends Model { use Bookmarker; }
Trendsoft\LaravelBookmark\Traits\Bookmarkable
use Illuminate\Database\Eloquent\Model; use Trendsoft\LaravelBookmark\Traits\Bookmarkable; class Post extends Model { use Bookmarkable; }
API
$user = User::find(1); $post = Post::find(1); $user->bookmark($post); $user->unBookmark($post); $user->toggleBookmark($post); $user->hasBookmarked($post); $post->isBookmarkedBy($user);
分页获取用户书签
$bookmarks = $user->bookmarks()->with('bookmarkable')->paginate(20); foreach($bookmarks as $bookmark){ $bookmark->bookmarkable; // App\Post instance }
获取对象书签者
foreach($post->bookmarkers as $user){ echo $user->name; }
分页
$bookmarkers = $post->bookmarkers()->paginate(20); foreach($bookmarkers as $user){ echo $user->name; }
聚合
//all $user->bookmarks()->count(); //with type $user->bookmarks()->withType(Post::class)->count(); // bookmarkers count $post->bookmarkers()->count();
使用 *_count
属性列出
$users = User::withCount('bookmarks')->get(); foreach($users as $user){ echo $user->bookmarks_count; }
N + 1 问题
为了避免 N+1 问题,您可以使用预加载将此操作减少到仅2个查询。在查询时,您可以使用 with 方法指定要预加载的关系
// Bookmarker $users = App\User::with('bookmarks')->get(); foreach($users as $user) { $user->hasBookmarked($post); } // Bookmarkable $posts = App\Post::with('bookmarks')->get(); // or $posts = App\Post::with('bookmarkers')->get(); foreach($posts as $post){ $post->isBookmarkedBy($user); }
事件
贡献
您可以通过以下三种方式之一进行贡献
代码贡献流程不是很正式。您只需确保遵循 PSR-0、PSR-1 和 PSR-2 编码规范。任何新的代码贡献都必须附有相应的单元测试(如果适用)。
许可证
MIT