attach($user->id) 不起作用并呈现为 null
Posted
技术标签:
【中文标题】attach($user->id) 不起作用并呈现为 null【英文标题】:attach($user->id) isn't working and is rendering as null 【发布时间】:2020-11-12 16:03:29 【问题描述】:我有一个消息传递系统,它允许用户互相发送消息、回复消息并在收到消息时得到通知。我遇到的问题是 $conversation->participants()->attach($reciever->id);
返回 null 并且似乎没有附加会话参与者我 dd()
的值。
InboxTest.php
public function a_user_can_leave_a_reply_in_conversation()
$this->withoutExceptionHandling();
$this->actingAs($user = factory('App\User')->create());
$conversation = factory('App\Conversation')->create();
$reciever = factory('App\User')->create();
$conversation->participants()->attach($reciever->id);
$response = $this->json('POST', '/api/message/'. $conversation->hashed_id . '/reply', ['body'=> 'A new message.'])
->assertStatus(201);
$response->assertJsonFragment(['body' => 'A new message.']);
$this->assertDatabaseHas('messages', [
'conversation_id' => $conversation->id,
'sender_id' => $user->id,
'body' => 'A new message.'
]);
$this->assertDatabaseHas('conversation_participants',[
'user_id' => $reciever->id
]);
这也导致通知系统出错:
错误:在 null 上调用成员函数 routeNotificationFor()
InboxController.php
public function reply($hashedId, Request $request)
$this->validate($request, [
'body' => 'required',
]);
$conversation = Conversation::where('hashed_id', $hashedId)->first();
$users = $conversation->recipients;
$notifications = Notification::send($users, new MessageNotification(auth()->user()));
$message = $conversation->messages()->create([
'sender_id' => auth()->user()->id,
'body' => $request->body,
]);
return new MessageResource($message);
这是我的人际关系:
Conversations.php
public function participants()
return $this->belongsToMany('App\User' ,'conversation_participants','conversation_id','user_id')->withPivot(['status','is_sender']);
User.php
public function conversations()
return $this->belongsToMany('App\Conversation','conversation_participants', 'user_id', 'conversation_id');
participants()
关系方法中的withPivot()
有没有可能搞砸了?我做错了什么?
【问题讨论】:
【参考方案1】:我在对话模型中看不到任何 recipients
关系。
但在控制器中,您正试图让用户使用收件人关系,并将通知发送给这些用户。
收件箱控制器.php
$users = $conversation->recipients;
$notifications = Notification::send($users, new
MessageNotification(auth()->user()));
我可以从您的测试功能中了解到,您没有将任何用户附加到接收者方法。您将其与参与者关系附加。
收件箱测试.php
$reciever = factory('App\User')->create();
$conversation->participants()->attach($reciever->id);
附加的方式和你写的一样好。
也许与参与者/收件人的关系有关。如果我有任何问题,请在 cmets 中告诉我。
【讨论】:
以上是关于attach($user->id) 不起作用并呈现为 null的主要内容,如果未能解决你的问题,请参考以下文章
在 Debian Stretch 上运行时,mysql 5.7 load_file 不起作用