我不明白如何指定查询以获取相关联的计数 在我的例子中,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();
如何正确编写此查询?
答案 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');