我在进行研究以找到解决此问题的明确解决方案时提出了这个问题,但是许多可用的答案只是如何使用 Laravel Scheduler 本身!
所以我正在用 Laravel 创建一个简单的网站,让用户自己创建提醒。
用户可以在他们的电子邮件上收到提醒,或者如果他们已登录,他们会收到类似于 Facebook 通知的通知提醒。
我不确定我是否走在正确的道路上,但我正在使用 Laravel Scheduler 向每个特定用户发送提醒。
我还使用 Laravel 中的事件每 1 分钟向用户推送最近的更改,但我的问题是,所有用户都会收到相同的通知。例如,如果我想提醒X 先生约会,Y 女士也收到相同的确切通知!!!
在这一点上,我有两个问题:
1 - 使用 Laravel Scheduler 是否适合这个项目?如果不是,那么推荐什么技术或方法?
2 - 如果我必须为此项目使用 Laravel 调度程序,那么如何向相关用户发送通知?(我不能使用用户 ID,因为 Laravel 调度程序是由服务器本身而不是用户运行的!)
我还附上了我的代码来向你展示我到目前为止所拥有的,我知道我在 Laravel Channels Broadcast 中使用的方法在某种程度上是错误的,但我刚试过!
如果有人知道答案,请帮助我。谢谢
Laravel 调度器 - 命令 - 处理函数
public function handle()
{
$reminders = Note::whereTime('task_date', '<=', Carbon::now()->addMinutes(30))
->WhereTime('task_date', '>', Carbon::now()->subMinutes(30))->get();
foreach ($reminders as $reminder) {
if (!$reminder->notified) {
Note::find($reminder->id)
->update(['notified' => 1]);
event(new RemindUsers($reminder));
dd($reminder->title);
}
}
}
Laravel 事件
public $reminder;
public function __construct($reminder)
{
$this->reminder = $reminder;
}
public function broadcastOn()
{
return new PrivateChannel('remind.'.$this->reminder->user_id);
}
public function broadcastWith () {
return [
'reminders' => $this->reminder
];
}
Laravel 频道
Broadcast::channel('remind.{id}', function ($user, $id) {
$notes = Note::where('user_id', $id)->get();
foreach ($notes as $note) {
return $user->id === $note->user_id;
}
});
Vue JS 代码 - Echo 方法
data () {
return {
user: 1
}
},
CatchReminders () {
Echo.private(`remind.${this.user}`)
.listen('RemindUsers', (response) => {
this.$toast.info(`${response.reminders.title}`)
})
}