Package Data | |
---|---|
Maintainer Username: | overtrue |
Maintainer Contact: | anzhengchao@gmail.com (overtrue) |
Package Create Date: | 2019-01-18 |
Package Last Update: | 2024-03-13 |
Home Page: | |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-11 15:07:00 |
Package Statistics | |
---|---|
Total Downloads: | 153,729 |
Monthly Downloads: | 3,976 |
Daily Downloads: | 158 |
Total Stars: | 484 |
Total Watchers: | 10 |
Total Forks: | 39 |
Total Open Issues: | 0 |
$ composer require overtrue/laravel-like -vvv
This step is optional
$ php artisan vendor:publish --provider="Overtrue\\LaravelLike\\LikeServiceProvider" --tag=config
This step is also optional, if you want to custom likes table, you can publish the migration files:
$ php artisan vendor:publish --provider="Overtrue\\LaravelLike\\LikeServiceProvider" --tag=migrations
Overtrue\LaravelLike\Traits\CanLike
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Overtrue\LaravelLike\Traits\CanLike;
class User extends Authenticatable
{
use Notifiable, CanLike;
<...>
}
Overtrue\LaravelLike\Traits\CanBeLiked
use Illuminate\Database\Eloquent\Model;
use Overtrue\LaravelLike\Traits\CanBeLiked;
class Post extends Model
{
use CanBeLiked;
<...>
}
$user = User::find(1);
$post = Post::find(2);
$user->like($post);
$user->unlike($post);
$user->toggleLike($post);
$user->hasLiked($post);
$post->isLikedBy($user);
Get user likes with pagination:
$likes = $user->likes()->with('likable')->paginate(20);
foreach ($likes as $like) {
$like->likable; // App\Post instance
}
Get user liked items without pagination:
$items = $user->likedItems();
foreach ($items as $item) {
// $item: App\Post instance
}
Get object likers:
foreach($post->likers as $user) {
// echo $user->name;
}
with pagination:
$likers = $post->likers()->paginate(20);
foreach($likers as $user) {
// echo $user->name;
}
// all
$user->likes()->count();
// with type
$user->likes()->withType(Post::class)->count();
// likers count
$post->likers()->count();
List with *_count
attribute:
$users = User::withCount('likes')->get();
foreach($users as $user) {
echo $user->likes_count;
}
To avoid the N+1 issue, you can use eager loading to reduce this operation to just 2 queries. When querying, you may specify which relationships should be eager loaded using the with
method:
// CanLike
$users = App\User::with('likes')->get();
foreach($users as $user) {
$user->hasLiked($post);
}
// CanBeLiked
$posts = App\Post::with('likes')->get();
// or
$posts = App\Post::with('likers')->get();
foreach($posts as $post) {
$post->isLikedBy($user);
}
| Event | Description |
| --- | --- |
| Overtrue\LaravelLike\Events\Liked
| Triggered when the relationship is created. |
| Overtrue\LaravelLike\Events\Unliked
| Triggered when the relationship is deleted. |
You can contribute in one of three ways:
The code contribution process is not very formal. You just need to make sure that you follow the PSR-0, PSR-1, and PSR-2 coding guidelines. Any new code contributions must be accompanied by unit tests where applicable.
想知道如何从零开始构建 PHP 扩展包?
请关注我的实战课程,我会在此课程中分享一些扩展开发经验 —— 《PHP 扩展包实战教程 - 从入门到发布》
MIT