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

问题描述

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

在 PostsController 中


    /**
     * 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 降序显示(asc)。

ID 按降序排列。

检查 $postsdd($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']);

我怎样才能获得最好的结果?

解决方法

所以一个帖子有很多 Slug,当您在分页中加载帖子时(按帖子中的某个字段排序),您希望这些帖子中的 slug 按 id 排序?您应该可以使用容器中的 queryBuilder 参数执行此操作:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...