我有2个表视频和视图。视频有很多视图。我正在运行此查询:
$query = $this->Videos->find('all');
$query->select([
'id',
'title',
'user_id',
'purchase_count',
'created',
'price',
'total_price'=>$query->newExpr()->add('price*purchase_count'),
'created'
])->distinct();
$query->contain([
'Views'=>function($v)use($from,$to){
return $v->select([
'id',
'video_id',
'free_views_total'=>$v->func()->sum('free_views'),
'subscription_view_total'=>$v->func()->sum('subscription_view')
])
->where([
'Views.created >='=>$from,'Views.created <='=>$to])->group('video_id');
}]);
$this->paginate=[
'sortWhitelist' => [
'id',
'title',
'user_id',
'Views.free_views_total',
'Views.subscription_view_total',
'purchase_count',
'price',
'total_price',
'created'
]];
此查询工作正常,但我无法按free_views_total
和subscription_view_total
排序。我还在sortWhitelist
中添加了这些内容。但它也没有用。请帮忙。提前谢谢。
答案 0 :(得分:1)
由于hasMany关系,cake不会加入表,而是执行许多查询并加入结果集。
你可以做很多事情
您可以按意见搜索
$this->Videos->Views->find()
->group(['video_id'])
->contain('Videos')
或者您可以使用leftJoinWith代替
$query->leftJoinWith([Views'=>function($v)use($from,$to){ ...