gorankrgovic/laravel-subscribeable

使 Laravel Eloquent 模型可订阅。

v1.0.1 2019-03-17 09:22 UTC

This package is auto-updated.

Last update: 2024-09-17 21:56:24 UTC


README

简介

重要:这不是一个用于管理会员和付费方式订阅者的包。它用于管理用户/订阅者关系,例如在 YouTube 中,模型可以被用户订阅。

此包基于 Laravel Love 包的想法和架构,尽管功能不同。

功能

  • 使用 UUIDs 而不是整数(您的用户模型也必须使用它们!)
  • 专为与 Laravel Eloquent 模型协同工作而设计。
  • 使用合同以保持高度的可定制性。
  • 使用特性以获得开箱即用的功能。
  • 大部分逻辑由 SubscribeableService 处理。
  • 包含 Artisan 命令 gosubscribe:recount {model?} 以重新获取订阅计数器。
  • 一个模型的订阅是互斥的。
  • 按订阅计数获取可订阅模型。
  • subscribeunsubscribe 方法提供事件。
  • 遵循 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\Subscribe
  • Gox\Laravel\Subscribe\SubscribeCounter\Models\SubscribeCounter
  • Gox\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 许可协议授权。