我目前正在使用Laravel的私人消息系统。
我正在尝试在用户的收件箱中显示消息线程列表。这类似于即时消息传递系统如何显示消息,其中2个用户之间的所有消息都存储在单个线程中。
我遇到的问题是我有多种消息类型:"消息"和"任务"。在"消息"收件箱,我只想显示线程类型为" Message"的消息线程。为此,我在控制器中使用以下代码:
$messageThreads = Thread::where('type', 'Message')
->where('sender_id', $user)
->orWhere('recipient_id', $user)
->get()
->sortByDesc('updated_at');
然而,这仍然无法正常工作,并且仍在检索类型为"任务"的消息线程。而不是仅限于"消息"
我也尝试过:
$messageThreads = Thread::where('sender_id', $user)
->orWhere('recipient_id', $user)
->where('type', 'Message')
->get()
->sortByDesc('updated_at');
但是这也得到了同样的结果。
有趣的是,如果我把它留作
$messageThreads = Thread::where('type', 'Message')
它只会检索类型为" Message"的消息。只有当我添加其他"其中"条款,它停止正常工作。
答案 0 :(得分:2)
如前所述,您可能需要对where子句进行分组:
Thread::where('type','Message')
->where(function($query)
{
$query->where('sender_id',$user)
->orWhere('recipient_id',$user);
})->get();
原因是您正在寻找Thread
where
type
Message
orWhere
其recipient_id
是{{1} }}。它们可能是不是类型消息的消息,但确实将用户作为收件人ID。