按照HasMany Relationship CakePHP 3的关联模型排序

时间:2017-09-07 08:35:56

标签: php cakephp pagination cakephp-3.0

  • 发表了很多评论

注释(ID,标题,内容,is_main)。每个帖子至少有一条评论,必须有一条评论作为主要评论(只有一条评论为主要评论)

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

控制器:

  

$ query = $ this-> Post-> find() - > contains([“Comment”]);

模板:

  

Paginator-> sort('comment',“Comment(s)”)   ?>

2 个答案:

答案 0 :(得分:3)

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

鉴于只能有一个主要评论,您可以直接加入Comment(顺便说一下,如果您按照Comments Posts$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');
{{1}}

另见

答案 1 :(得分:1)

在控制器:

$this->paginate = [
    'contain'=>['Comments'],
    'sortWhitelist'=>['Comments.comment']
    ];

$posts = $this->paginate($this->Posts);

在模板:

<?= $this->Paginator->sort('Comments.comment') ?>

Sorting Contained Associations CakePHP3。

此答案仅适用于hasOne关系。