gpt4 book ai didi

laravel - 调用未定义的方法 Illuminate\Database\Eloquent\Relations\BelongsToMany::routeNotificationFor()

转载 作者:行者123 更新时间:2023-12-02 02:59:01 25 4
gpt4 key购买 nike

我正在构建一个消息系统,在设置回复时通知对话中的每个用户。

MessageNotification.php

class MessageNotification extends Notification
{
use Queueable;

/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['database'];
}

public function toArray($notifiable)
{
return [
'data' => 'Messenger notification'
];
}
}

InboxController

public function reply($hashedId, Request $request)
{
$this->validate($request, [
'body' => 'required',
]);

$conversation = Conversation::where('hashed_id', $hashedId)->first();

$users = $conversation->participants();

//dd($conversationUserIds);

$notifications = Notification::send($users, new MessageNotification());

$message = $conversation->messages()->create([
'sender_id' => auth()->user()->id,
'body' => $request->body,
]);

return new MessageResource($message);
}

错误

Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsToMany::routeNotificationFor()

额外信息

由于需要同时使用 Laravel Sparks 通知系统和 Laravel 库存通知系统,我必须构建一个自定义的 Notificate 特征。 Tutorial I got code from.

自定义通知特征

namespace App\Traits;

use Illuminate\Notifications\Notifiable as BaseNotifiable;
use App\Notifications\DatabaseNotification;

trait Notifiable {

use BaseNotifiable;

public function notifications() {
return $this->morphMany(DatabaseNotification::class, 'notifiable')->orderBy('created_at', 'desc');
}

}

另请注意,$reciever->notify(new MessageNotification()); 在向一个用户发送通知时效果很好。我对此看到的唯一其他解决方案是:https://laracasts.com/discuss/channels/code-review/call-to-undefined-method-routenotificationfor-while-sending-email-to-multiple-users

我尝试实现这一点,但我使用的是数据库 channel ,所以它应该不会产生影响。

最佳答案

这行在这里:

$users = $conversation->participants();

$users 变量设置为 QueryBuilder 实例(假设您使用的是传统的 Laravel 关系),而不是用户集合。这是因为关系末尾的 () 构建了查询,但尚未运行它。因此,当您调用 Notification::send($users, etc...) 时,您不会传递用户集合;而是传递用户集合。您正在传递一个 QueryBuilder 对象。

试试这个:

$users = $conversation->participants;

同样,这是假设对话模型上的参与者方法是标准的 Laravel 关系。

关于laravel - 调用未定义的方法 Illuminate\Database\Eloquent\Relations\BelongsToMany::routeNotificationFor(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60424804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com