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 不起作用

拉拉维尔 | Auth::user()->id 在 AppServiceProvider 中不起作用

CakePHP updateAll()不起作用

查询计算有多少用户在线不起作用

用户编辑资源不起作用

cakephp函数更新一行不起作用