添加项目后,我将获取所有有权查看该项目的用户以通知他们。
这是在一个侦听器中发生的:
[['Local Interface', 'Parent Interface', 'Chassis Id', 'Port info', 'System Name'], ['ge-0/0/1'], ['{master}']]
这有效。但是当我的系统中有1000个用户并且5个用户可以查看该项目时,我将遍历995个用户。
随着事件和侦听器同步运行,添加项目的用户必须等待这种情况发生。
我该如何加速呢?
编辑:好的,可以将侦听器排队。但是,改进此代码会很棒。
答案 0 :(得分:0)
我对Gate Facade不熟悉,但是如果它在具有关系的模型中,则可以使用whereHas:
$users = App\User::whereHas('permissions', function ($q) use ($event) {
$q->where('name', 'view')->where('model_id', $event->project->id);
})->get();
https://laravel.com/docs/5.7/eloquent-relationships#querying-relationship-existence
答案 1 :(得分:0)
您可以使用laravel的Notifications特性来允许订阅的用户接收通知事件。这些通知可以排队等待以后处理,通过电子邮件/短信/闲置发送,保存到数据库,或者像您的用例一样用于广播消息。
发出新通知
php artisan make:notification InvoicePaid
使用可通知的特征
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
}
现在用户有一个 notify 方法,该方法以 notification 作为参数
use App\Notifications\InvoicePaid;
$user->notify(new InvoicePaid($invoice));
https://laravel.com/docs/5.8/notifications
教程:https://code.tutsplus.com/tutorials/notifications-in-laravel--cms-30499