$conversations = Conversations::with('bulletin', 'messages')->leftJoin('own', 'conversations.bulletin_id', '=',
'own.id')
->select('conversations.*')
->where('owner_id', $userId)
->orWhere('owner', $userId)
->orderBy('updated_at', 'desc')
->get();
dd($conversations);
$conversation = Conversations::getInfo($conversations->first());
foreach ($conversations as $conversation) {
dd($conversation->bulletin);
}
https://i.imgur.com/qne8Xhh.png-第一个dd()的屏幕截图
https://i.imgur.com/OCjFfD0.png-foreach()中的dd()屏幕截图-这里没有任何内容
如果我尝试访问$conversation->bulletin->id
,这将是错误的'undefined property ...'
public static function getInfo($conversation)
{
$conversation->messages = self::find($conversation->id)->messages();
$conversation->bulletin = self::find($conversation->id)->bulletin();
$conversation->users = self::find($conversation->id)->users();
return $conversation;
}
答案 0 :(得分:1)
之所以发生这种情况,是因为对于某些$conversations
或可能是$conversation
之一,它没有任何bulletin
。结果,当您遍历所有$conversations
并访问$conversion->bulletin->id
时,一个conversation
会导致错误。运行dd
时,它只会转储第一个conversation
并死亡。结果,您无法正确看到问题所在。
替换以下行:
dd($conversation->bulletin);
有这行,请参阅:
dump($conversation->id, $conversation->bulletin);
我很确定您会看到至少一个对话没有任何公告。
更新:
self :: find($ conversation-> id)-> users();将返回关系对象,而不是用户集合。如果要访问用户集合,则应执行self::find($conversation->id)->users
。与bulletin
和messages
实际上,我认为您不需要此getInfo()
方法。您只需要正确使用with
查询方法
因此,替换:
Conversations::with('bulletin','messages')
此部分由Conversations::with('bulletin','messages',
个用户)