我想对分页中包含的相关值进行排序(CakePHP4)

siotufzp  于 2022-11-12  发布在  PHP
关注(0)|答案(1)|浏览(142)

获取与Posts模型关联的Slugs的值contain。我想按照检索到的Slugs表的ID对它们进行排序。
在Posts控制器中

/**
     * Index method
     *
     * @return \Cake\Http\Response|null|void Renders view
     */
    public function index()
    {
        $this->paginate = [
            'limit' => 10,
            'contain' => ['Slugs'],
            'order' => [
                'Slugs.id' => 'desc',
            ],
        ];
        $posts = $this->paginate($this->Posts);
        $this->set(compact('posts'));
    }

检索到的值将按ID的降序(升序)显示。
ID按降序排列。
检查dd($posts)$posts值的内容。

0 => App\Model\Entity\Posts {#163 ▼
      #_accessible: array:6 [▶]
      #_fields: array:6 [▶]
      // ....
      id: 1
      title: "CakePHP"
      user_id: 1
      created: Cake\I18n\FrozenTime @1613560300 {#164 ▶}
      modified: Cake\I18n\FrozenTime @1613560300 {#195 ▶}
      users: array:2 [▼
        0 => App\Model\Entity\Slug {#213 ▼
          // ...
          id: 1
          name: "PHP7.2"
          [new]: false
          // ...
        }
        1 => App\Model\Entity\Slug {#224 ▼
          id: 2
          name: "CakePHP4"
          // ...

我已经尝试了以下方法

'order' => [
                'Posts.Slugs.id' => 'desc',
            ],

$posts = $this->paginate($this->Posts->find()->order(['Slugs.id']);

如何才能获得最佳效果?

kuhbmx9i

kuhbmx9i1#

因此,一个帖子有很多Slug,当你在分页中加载帖子(按帖子中的某个字段排序)时,你希望这些帖子中的Slug按id排序?你应该可以通过containment中的queryBuilder参数来实现这一点:

$this->paginate = [
    'limit' => 10,
    'contain' => [
        'Slugs' => [
            'queryBuilder' => function (Query $q) {
                return $q->order(['Slugs.id']);
            }
        ],
    ],
];

相关问题