【发布时间】:2021-06-08 12:30:41
【问题描述】:
我有两张桌子。
- 聊天室
- chat_pinned_rooms
chat_rooms 与 chat_room_id 的 chat_pinned_rooms 有 has_many 关系。
现在我想按chat_pinned_rooms 对chat_rooms 数据进行排序(排序)。
我尝试了以下查询:
$this->ChatRooms->find()
->contain('ChatPinnedRooms', function ($q) {
return $q
->where(['user_id' => $this->Auth->id])
;
})
->order([
'ChatRooms.ChatPinnedRooms.id' => 'ASC'
])
->all()
;
如果我在包含中使用此顺序,它只会对这些关联中的数据进行排序。但我需要按关联顺序对父表数据(chat_rooms)进行排序。
【问题讨论】:
-
你有一个逻辑问题要先解决!您有一个
1:n关联,每个聊天室可以有很多固定房间,那么您想按这些固定房间行的id列中的哪一个进行排序,为什么?首先尝试弄清楚如何使用原始 SQL 解决问题,然后从那里开始并将内容转换到查询构建器通常会更容易。 -
@ndm 实际上,我想拥有固定在顶部的聊天室和未固定在底部的聊天室。所以,如果我有十个聊天室,其中两个是固定的。我想在顶部显示这两个固定的聊天室。
-
我不确定我是否理解正确,您想先对那些有 1 个或多个关联
ChatPinnedRooms的ChatRooms进行排序? -
@ndm 是的!你是绝对正确的。
标签: cakephp cakephp-4.x