CakePHP3:如何获取相关的计数

时间:2016-04-29 09:01:50

标签: cakephp-3.x

我不明白如何指定查询以获取相关联的计数 在我的例子中,Agthemes属于Agplans 在DB中,4 Agthemes属于Agplan id 22和1 Agthemes属于Agplan id 23。

我目前编写了以下查询,该查询在第一个Agplans数组的Agthemes数组中返回5的计数,在第二个Agplames数组中返回空的Agthemes数组。

$agplans = $this->Agplans->find()
   ->contain([
           'Agthemes' => function ($q) {
               return $q->select(
                   [
                       'id',
                       'agplan_id',
                       'count' => $q->func()->count('*')
                   ]);
           }
       ])
   ->where([
            'site_id' => $site->id
      ])
   ->all();

如何正确编写此查询?

2 个答案:

答案 0 :(得分:0)

你还要对Agthemes进行分组

->contain([
    'Agthemes' => function ($q) {
        return $q->select(
            [
                'id',
                'agplan_id',
                'count' => $q->func()->count('*')
           ])
           ->group(['agplan_id']);
       }
   ])

答案 1 :(得分:0)

hasMany实例的另一种方法。请注意leftJoin而不是contains。

$userTableQuery = $UsersTable->find();
$data = $userTableQuery
    ->select([
        'Users.id',
        'order count' => $userTableQuery->func()->count('Orders.id')
    ])
    ->leftJoinWith('Orders')
    ->group('Users.id');