我正在尝试在laravel 4中建立消息传递系统。我有两个类Conversation和User,它们之间存在多对多关系。我正在输出已登录用户的对话列表以及对话中的用户列表:
@foreach(User::find(Auth::user()->id)->conversations as $conversation)
{{ $conversation->id }}
@foreach($conversation->users as $user)
{{ $user->name }}
@endforeach
<br><br>
@endforeach
它正在工作,并输出对话ID,后跟参与该对话的用户名。我的问题是这样运行大量查询,我无法弄清楚如何使用紧急加载,而仍然只能选择已登录的用户对话。任何帮助将非常感激!
编辑:
使用以下代码,我得到正确的输出,但仍然查询数据库很多:
<?php $user = User::with('conversations')->find(Auth::user()->id); ?>
{{ $user->username }}'s conversations<br><br>
@foreach($user->conversations as $conversation)
{{ $conversation->id }}
@foreach($conversation->users as $user)
{{ $user->name }}
@endforeach
<br>
@endforeach
我真的很想能够将这一部分@foreach($ conversation-> users as $ user)加载。它输出:
user_1的对话
1个用户_1个用户_2
5个user_1 user_3
我相信在任何情况下,只有1个用户会话处于活动状态。为什么需要foreach来遍历logged in
用户?您的应用程序如何工作?
渴望加载:
$user = User::find(Auth::user()->id);
$conversations = $user::with('conversation')->get();
或@David Barker指出:
User::with('conversation')->find(Auth::user()->id)
对话可能属于许多用户。所以:
$conversation_id = [];
@foreach($user->conversations as $conversation)
array_push($conversation_id, $conversation->id);
@endforeach
$conversations_with_users = Conversation::with('user')->whereIn('id', $conversation_id);
现在遍历$ conversations_with_users。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句