zing/laravel-subscribe

此包已被弃用且不再维护。作者建议使用 laravel-interaction/subscribe 包。

Laravel 用户订阅/取消订阅行为。

3.3.0 2024-03-18 14:48 UTC

README

Laravel 用户订阅/取消订阅行为。

Latest Stable Version Total Downloads Latest Unstable Version License

简介

该包用于用户订阅(用户/主题/频道)模型以接收通知。

安装

要求

说明

使用 Composer 安装 Laravel Subscribe。

composer require laravel-interaction/subscribe

发布配置和迁移

php artisan vendor:publish --tag=subscribe-config
php artisan vendor:publish --tag=subscribe-migrations

运行数据库迁移。

php artisan migrate

使用方法

设置订阅者

use Illuminate\Database\Eloquent\Model;
use LaravelInteraction\Subscribe\Concerns\Subscriber;

class User extends Model
{
    use Subscriber;
}

设置可订阅对象

use Illuminate\Database\Eloquent\Model;
use LaravelInteraction\Subscribe\Concerns\Subscribable;

class Channel extends Model
{
    use Subscribable;
}

订阅者

use LaravelInteraction\Subscribe\Tests\Models\Channel;
/** @var \LaravelInteraction\Subscribe\Tests\Models\User $user */
/** @var \LaravelInteraction\Subscribe\Tests\Models\Channel $channel */
// Subscribe to Subscribable
$user->subscribe($channel);
$user->unsubscribe($channel);
$user->toggleSubscribe($channel);

// Compare Subscribable
$user->hasSubscribed($channel);
$user->hasNotSubscribed($channel);

// Get subscribed info
$user->subscriberSubscriptions()->count(); 

// with type
$user->subscriberSubscriptions()->withType(Channel::class)->count(); 

// get subscribed channels
Channel::query()->whereSubscribedBy($user)->get();

// get subscribed channels doesnt subscribed
Channel::query()->whereNotSubscribedBy($user)->get();

可订阅对象

use LaravelInteraction\Subscribe\Tests\Models\User;
use LaravelInteraction\Subscribe\Tests\Models\Channel;
/** @var \LaravelInteraction\Subscribe\Tests\Models\User $user */
/** @var \LaravelInteraction\Subscribe\Tests\Models\Channel $channel */
// Compare Subscriber
$channel->isSubscribedBy($user); 
$channel->isNotSubscribedBy($user);
// Get subscribers info
$channel->subscribers->each(function (User $user){
    echo $user->getKey();
});

$channels = Channel::query()->withCount('subscribers')->get();
$channels->each(function (Channel $channel){
    echo $channel->subscribers()->count(); // 1100
    echo $channel->subscribers_count; // "1100"
    echo $channel->subscribersCount(); // 1100
    echo $channel->subscribersCountForHumans(); // "1.1K"
});

事件

事件 触发
LaravelInteraction\Subscribe\Events\Subscribed 当对象被订阅时。
LaravelInteraction\Subscribe\Events\Unsubscribed 当对象被取消订阅时。

许可

Laravel Subscribe 是一个开源软件,许可协议为 MIT