在cakephp 3中对关联的计算字段进行排序

时间:2015-10-20 10:05:42

标签: cakephp cakephp-3.0

我有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_totalsubscription_view_total排序。我还在sortWhitelist中添加了这些内容。但它也没有用。请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:1)

由于hasMany关系,cake不会加入表,而是执行许多查询并加入结果集。

你可以做很多事情

您可以按意见搜索

$this->Videos->Views->find()
->group(['video_id'])
->contain('Videos')

或者您可以使用leftJoinWith代替

$query->leftJoinWith([Views'=>function($v)use($from,$to){ ...