iT邦幫忙

0

mysql 查詢,聊天列表顯示排序問題,

  • 分享至 

  • xImage

請教前輩!任何指教都感恩在先!
我有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 則排除聊天紀錄中他沒有參與的聊天室,

如上例應該只得到結果輸出
聊天一
聊天二

請教一下前輩,這應該怎麼寫?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
耿直小伙
iT邦新手 1 級 ‧ 2021-07-11 18:25:31
最佳解答

你在想辦法轉成 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

非常謝謝您,我試試看我的功力能否順利使用ORM拚寫出來

@耿直小伙 我的功力尚無法自行轉換成ORM 語句,能否勞煩貴手再深入指教一下

已經解決!

我要發表回答

立即登入回答