[Laravel Collect](https://github.com/VetorPers/laravel-collect) 是我開發(fā)的一個收藏文章的擴(kuò)展,借鑒于 [cybercog/laravel-love](https://github.com/cybercog/laravel-love) 攒巍,我也有幸參加了社區(qū)對該擴(kuò)展的外文翻譯文章 [為你的 Eloquent 模型添加喜歡和討厭功能](https://learnku.com/laravel/t/15898?#SectionIndex_4)踪旷。我的初衷是學(xué)習(xí)怎么開發(fā) Laravel 擴(kuò)展包园爷,所以實現(xiàn)的功能可能比較簡單,請大神勿噴矮锈。但是對于想學(xué)習(xí)開發(fā) Laravel 擴(kuò)展包的同學(xué)還是不錯的怕敬。望大家點贊支持咖为,感謝秕狰。
最近發(fā)現(xiàn)已經(jīng)有人使用我的擴(kuò)展包到項目里稠腊,我更有動力不斷更新完善。fight鸣哀!
## 安裝
通過 composer 安裝架忌,命令如下:
```sh
$ composer require vetor/laravel-collect
```
我們需要執(zhí)行模型遷移命令,將 `Collections` 表發(fā)布到我們的數(shù)據(jù)庫:
```sh
$ php artisan migrate
```
## 使用
在我們的收藏者表我衬,即 `User` 表里需要實現(xiàn) `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` 表里實現(xiàn) `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();
// 取消收藏(默認(rèn)為當(dāng)前用戶挠羔,可以把用戶實例作為參數(shù)傳入)
$article->cancelCollect();
//? 獲取文章的收藏情況
$article->collections();
// 獲取文章收藏數(shù)
$article->collections_count;
// 根據(jù)收藏數(shù)排序(升序 'asc'井仰;降序 'desc';默認(rèn)為升序)
Article::orderByCollectionsCount()->get();
```
我們可以通過下面的方法來獲取收藏表里所有文章:
```
Collection::whereCollectable(Article::class)->get();
```
## 更多
代碼參見 Github 倉庫 [vetor/laravel-collect](https://github.com/VetorPers/laravel-collect)破加,歡迎大家提出自己的想法俱恶,指出不足,我們一起學(xué)習(xí)進(jìn)步范舀。再次感謝 [cybercog/laravel-love](https://github.com/cybercog/laravel-love) 合是。