评论(id,标题,内容,is_main)。每个帖子至少有一个评论,并且必须有一个评论作为主评论(只有1个评论是主评论)
我需要按主要的评论标题对Post进行排序,但是在Cake 3.x中似乎已删除了按虚拟字段进行的排序。
Controller :
模板:
最佳答案
是的,旧的虚拟字段概念已删除,是的,但是定义计算列/选择自定义列的可能性很高,即使您尝试执行的操作并非必需。
鉴于只能有一个主要注释,您可以在这种情况下直接加入Comment
(顺便说一句,如果您遵循CakePHP naming conventions,则应为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');
也可以看看