cakephp 如何通过关联顺序获取数据?

jhdbpxl9  于 2022-11-11  发布在  PHP
关注(0)|答案(1)|浏览(123)

我有两张table。
1.聊天室(_R)
1.聊天_固定_房间

聊天室通过chat_room_id固定聊天室具有has_many关系。

现在我想按chat_pinned_roomschat_rooms数据进行排序。
我已经尝试了以下查询:

$this->ChatRooms->find()
    ->contain('ChatPinnedRooms', function ($q) {
            return $q
                ->where(['user_id' => $this->Auth->id])
            ;
        })
    ->order([
        'ChatRooms.ChatPinnedRooms.id' => 'ASC'
    ])
    ->all()
;

如果我在contain中使用这个顺序,它只会对那些关联中的数据进行排序。但是我需要按关联顺序对父表数据(chat_rooms)进行排序。

kmynzznz

kmynzznz1#

如果你想首先对那些有一个或多个关联ChatPinnedRoomsChatRooms进行排序,那么你可以加入ChatPinnedRooms关联,为每个ChatRooms.id创建一个组,然后根据这些组中ChatPinnedRooms的数量进行排序,沿着于下面这样:
第一个
(if如果您希望在结果中包含固定房间,则也需要对它们执行contain()操作,就像您的示例中那样)或者您可以使用计数器缓存,以便在ChatRooms中有一个具体的列,用于保存关联记录的计数,然后可以使用该列进行排序,例如:
第一个
另请参阅

*Cookbook〉数据库访问和ORM〉查询生成器〉使用leftJoinWith
*手册〉数据库访问和ORM〉查询生成器〉使用SQL函数
*Cookbook〉数据库访问和ORM〉查询生成器〉排序结果


相关问题