用 Laravel Collect 收藏文章

若相惜發表於2018-11-16

Laravel Collect 是我開發的一個收藏文章的擴充套件,借鑑於 cybercog/laravel-love ,我也有幸參加了社群對該擴充套件的外文翻譯文章 為你的 Eloquent 模型新增喜歡和討厭功能。我的初衷是學習怎麼開發 Laravel 擴充套件包,所以實現的功能可能比較簡單,請大神勿噴。但是對於想學習開發 Laravel 擴充套件包的同學還是不錯的。望大家點贊支援,感謝。

安裝

通過 composer 安裝,命令如下:

$ composer require vetor/laravel-collect

我們需要執行模型遷移命令,將 Collections 表釋出到我們的資料庫:

$ php artisan migrate

使用

在我們的收藏者表,即 User 表裡需要實現 CollectorContract 介面,並引用 Collector trait:

use Illuminate\Foundation\Auth\User as Authenticatable;
use Vetor\Laravel\Collect\Collector\Models\Traits\Collector;
use Vetor\Contracts\Collect\Collector\Models\Collector as CollectorContract;

class User extends Authenticatable implements CollectorContract
{
    use Collector;
}

如果使用者需要收藏文章,在 Article 表裡實現 CollectableContract 介面並引用 Collectable trait 即可:

use Vetor\Laravel\Collect\Collectable\Models\Traits\Collectable;
use Vetor\Contracts\Collect\Collectable\Models\Collectable as CollectableContract;

class Article extends Model implements CollectableContract
{
    use Collectable;
}

可用的方法

對於使用者來說,可用的方法有:

// 收藏
$user->collect($article);

// 取消收藏
$user->cancelCollect($article);

// 使用者的所有收藏記錄
$user->collections;

// 使用者收藏的文章記錄
$user->collectionsWhereCollectable(Article::class);

文章可用的方法有:

// 收藏
$article->collect();

// 取消收藏(預設為當前使用者,可以把使用者例項作為引數傳入)
$article->cancelCollect();

//  獲取文章的收藏情況
$article->collections();

// 獲取文章收藏數
$article->collections_count;

// 根據收藏數排序(升序 'asc';降序 'desc';預設為升序)
Article::orderByCollectionsCount()->get();

我們可以通過下面的方法來獲取收藏表裡所有文章:

Collection::whereCollectable(Article::class)->get();

更多

程式碼參見 Github 倉庫 vetor/laravel-collect,歡迎大家提出自己的想法,指出不足,我們一起學習進步。再次感謝 cybercog/laravel-love

Persevere,Vtr!

相關文章