gorankrgovic / laravel-subscribeable
使 Laravel Eloquent 模型可订阅。
Requires
- php: ^7.0
- illuminate/database: ~5.5.0|~5.6.0|~5.7.0|~5.8.0
- illuminate/support: ~5.5.0|~5.6.0|~5.7.0|~5.8.0
- ramsey/uuid: ^3.8
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.10
- mockery/mockery: ^1.0
- orchestra/database: ~3.5.0|~3.6.0|~3.7.0
- orchestra/testbench: ~3.5.0|~3.6.0|~3.7.0
- phpunit/phpunit: ^6.0|^7.0|^7.5
README
简介
重要:这不是一个用于管理会员和付费方式订阅者的包。它用于管理用户/订阅者关系,例如在 YouTube 中,模型可以被用户订阅。
此包基于 Laravel Love 包的想法和架构,尽管功能不同。
功能
- 使用 UUIDs 而不是整数(您的用户模型也必须使用它们!)
- 专为与 Laravel Eloquent 模型协同工作而设计。
- 使用合同以保持高度的可定制性。
- 使用特性以获得开箱即用的功能。
- 大部分逻辑由
SubscribeableService处理。 - 包含 Artisan 命令
gosubscribe:recount {model?}以重新获取订阅计数器。 - 一个模型的订阅是互斥的。
- 按订阅计数获取可订阅模型。
- 为
subscribe、unsubscribe方法提供事件。 - 遵循 PHP 标准建议
- 包含单元测试。
安装
首先,通过 Composer 引入包。
$ composer require gorankrgovic/laravel-subscribe
执行数据库迁移
最后,您需要发布并运行数据库迁移。
$ php artisan migrate
如果您想更改迁移,首先将它们发布到您的应用程序中。
$ php artisan vendor:publish --provider="Gox\Laravel\Subscribe\Providers\SubscribeServiceProvider" --tag=migrations
用法
准备订阅者模型
在将获取订阅行为并实现它的模型中使用 Gox\Contracts\Subscribe\Subscriber\Models\Subscriber 合同,或者只需使用 Gox\Laravel\Subscribe\Subscriber\Models\Traits\Subscriber 特性。
use Gox\Contracts\Subscribe\Subscriber\Models\Subscriber as SubscriberContract; use Gox\Laravel\Subscribe\Subscriber\Models\Traits\Subscriber; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable implements SubscriberContract { use Subscriber; }
准备可订阅模型
在将获取订阅行为并实现它的模型中使用 Gox\Contracts\Subscribe\Subscribeable\Models\Subscribeable 合同,或者只需使用 Gox\Laravel\Subscribe\Subscribeable\Models\Traits\Subscribeable 特性。
use Gox\Contracts\Subscribe\Subscribeable\Models\Subscribeable as SubscribeableContract; use Gox\Laravel\Subscribe\Subscribeable\Models\Traits\Subscribeable; use Illuminate\Database\Eloquent\Model; class Article extends Model implements SubscribeableContract { use Subscribeable; }
可用方法
订阅
订阅模型
$user->subscribe($article); $article->subscrubeBy(); // current user $article->subscribeBy($user->id);
从模型中移除订阅标记
$user->unsubscribe($article); $article->unsubscribeBy(); // current user $article->unsubscribeBy($user->id);
获取模型订阅计数
$article->subcribesCount;
获取模型订阅计数器
$article->subscribesCounter;
获取订阅关系
$article->subscribes();
获取现有模型订阅的可迭代 Illuminate\Database\Eloquent\Collection
$article->subscribes;
布尔检查用户是否已订阅模型
$user->hasSubscribed($article); $article->subscribed; // current user $article->isSubscribedBy(); // current user $article->isSubscribedBy($user->id);
首先在预加载的关系 subscribes 中检查。
获取已订阅模型的用户集合
$article->collectSubscribers();
删除模型的全部订阅者
$article->removeSubscribes();
作用域
查找用户订阅的所有文章
Article::whereSubscribedBy($user->id) ->with('subscribesCounter') // Allow eager load (optional) ->get();
按订阅计数获取可订阅模型
$sortedArticles = Article::orderBySubscribesCount()->get(); $sortedArticles = Article::orderBySubscribesCount('asc')->get();
默认使用 desc 作为排序方向。
事件
在添加订阅时,触发 \Gox\Laravel\Subscribe\Subscribeable\Events\SubscribeableWasSubscribed 事件。
在删除订阅时,触发 \Gox\Laravel\Subscribe\Subscribeable\Events\SubscribeableWasUnsubscribed 事件。
控制台命令
重新计数所有模型类型的订阅者
$ gosubscribe:recount
使用形态映射别名重新计数具体模型类型
$ gosubscribe:recount --model="article"
使用完全限定类名重新计数具体模型类型
$ gosubscribe:recount --model="App\Models\Article"
扩展
您可以使用自己的实现覆盖包的核心类。
Gox\Laravel\Subscribe\Subscribe\Models\SubscribeGox\Laravel\Subscribe\SubscribeCounter\Models\SubscribeCounterGox\Laravel\Subscribe\Subscribeable\Services\SubscribeableService
注意:不要忘记所有自定义模型都必须实现原始模型接口。
为了实现它,您应该在应用程序服务提供者中使用容器 绑定接口到实现。
使用模型类的自实现
$this->app->bind( \Gox\Contracts\Subscribe\Subscribe\Models\Subscribe::class, \App\Models\CustomSubscribe::class );
之后,您可以使用辅助方法 app() 来实例化 CustomSubscribe 类。
$model = app(\Gox\Contracts\Subscribe\Subscribe\Models\Subscribe::class);
测试
使用以下命令运行测试
$ vendor/bin/phpunit
安全
如果您发现任何与安全相关的问题,请通过电子邮件联系我,而不是使用问题跟踪器。
许可证
Laravel Subscribe包是开源软件,由 Goran Krgovic 根据 MIT 许可协议授权。