• 发表有很多评论

  • 评论(id,标题,内容,is_main)。每个帖子至少有一个评论,并且必须有一个评论作为主评论(只有1个评论是主评论)

    我需要按主要的评论标题对Post进行排序,但是在Cake 3.x中似乎已删除了按虚拟字段进行的排序。

    Controller :



    模板:

    最佳答案

    是的,旧的虚拟字段概念已删除,是的,但是定义计算列/选择自定义列的可能性很高,即使您尝试执行的操作并非必需。

    鉴于只能有一个主要注释,您可以在这种情况下直接加入Comment(顺便说一句,如果您遵循CakePHP naming conventions,则应为CommentsPosts)关联。

    $this->paginate = [
        // ...
        'sortWhitelist' => [
            // associations and computed columns must be whitelisted, and if
            // you do that, the valid main model columns must be specified too
            'id',
            // ...
            'Comments.title'
        ]
    ];
    
    $query = $this->Posts
        ->find()
        ->leftJoinWith('Comments', function (\Cake\ORM\Query $query) {
            return $query
                ->where(['Comments.is_main' => true]);
        });
    
    $posts = $this->paginate($query);
    
    // in your view template
    
    $this->Paginator->sort('Comments.title', 'Main Comment Title');
    

    也可以看看
  • Cookbook > Controllers > Components > Pagination > Control which Fields Used for Ordering
  • Cookbook > Database Access & ORM > Retrieving Data & Results Sets > Using leftJoinWith
  • Cookbook > Views > Helpers > Paginator > Creating Sort Links
  • Cookbook > Views > Helpers > Paginator > Example Usage
  • 09-10 11:43