注释(ID,标题,内容,is_main)。每个帖子至少有一条评论,必须有一条评论作为主要评论(只有一条评论为主要评论)
我需要按照评论的标题对帖子进行排序,这是主要的,但按虚拟字段排序似乎已在Cake 3.x中删除
控制器:
$ query = $ this-> Post-> find() - > contains([“Comment”]);
模板:
Paginator-> sort('comment',“Comment(s)”) ?>
答案 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关系。