請教前輩!任何指教都感恩在先!
我有2張表格:
1、聊天室表 chat_rooms (model=ChatRoom)
id name status
1 聊天一 1
2 聊天二 1
3 聊天三 1
2、聊天紀錄表 chat_records (model=ChatRecord)
id 聊天室id 發話者id 聊天內容
1 1 1 id=1說的內容1
2 1 1 id=1說的內容2
3 1 1 id=1說的內容3
4 2 1 id=1說的內容4
5 2 1 id=1說的內容5
6 2 2 id=2說的內容1
7 3 2 id=2說的內容2
8 3 2 id=2說的內容3
9 3 2 id=2說的內容4
當我在 controller 中
$chatRooms = ChatRoom::where('status', 1)->orderBy('updated_at', 'desc')->get();
return view('test', compact('chatRooms'));
在 test.blade 中
<ul>
@foreach ($chatRooms as $chatRoom)
<li>{{ $chatRoom->name }}</li><br>
@endforeach
</ul>
結果輸出
聊天一
聊天二
聊天三
但是這不是我希望得到的結果,我希望根據 Auth::user()->id 如果是1 則排除聊天紀錄中他沒有參與的聊天室,
如上例應該只得到結果輸出
聊天一
聊天二
請教一下前輩,這應該怎麼寫?
你在想辦法轉成 ORM 寫法吧
SELECT chat_rooms.*
FROM chat_rooms
INNER JOIN chat_records
ON chat_records.聊天室id = chat_rooms.id
WHERE chat_rooms.status = 1
AND chat_records.發話者id = Auth::user()->id
ORDER BY chat_rooms.updated_at DESC