我想显示已发送或获得消息的用户。
用户模型:
public function messages_sender()
{
return $this->hasMany('App\Message', 'sender_id');
}
public function messages_recipient()
{
return $this->hasMany('App\Message', 'recipient_id');
}
MessageController
public function index()
{
$users = User::with('messages_recipient', 'messages_sender')->paginate(5);
//return $users;
return view('message.index',compact('users'));
}
消息查看:
{{ $user->messages_recipient['recipient_id'] }}
结果是视图“Undefined index:recipient_id”中的错误,或者当我尝试访问其中任何一个(sender_id,recipient_id)时出错。据我所知,并非所有用户都有消息,因为我看到的是JSON格式,所以我用过:
@if($user->messages_recipient->has('recipient_id'))
{{ $user->messages_recipient['recipient_id'] }}
@endif
而不是错误没有显示。
JSON:https://pastebin.com/NFSWMp7r
因为我是Laravel的新手,我可以使用一些帮助。在类似的示例中,当我需要获取用户和他们的角色名称(管理员,用户)时,它可以工作。
您可以从App\Message
模型访问用户,而不是相反。
消息模型:
public function senders()
{
return $this->belongsTo('App\Users', 'sender_id');
}
消息控制器
public function index()
{
$senders = Message::senders()->paginate(5);
return view('message.index',compact('senders'));
}
不要责怪我,但我不确定,如果sender_id
就在那里:-P
不幸的是,如果你想要独特的记录,这将不起作用。
您使用message_recipient作为数组,如果数组上不存在键,PHP将始终抛出错误。 hasMany关系返回Message对象的Collection,因此您需要将其用作对象:
@foreach($user->messages_sender as $message)
{{ $message->id }}
@endforeach
和
@foreach($user->messages_recipient as $message)
{{ $message->id }}
@endforeach
或者如果您只是想要所有的消息ID,您可以执行$user->messsages_recipient->pluck('id')
并返回Message对象的所有ID。