CakePHP3: как получить количество связанных

Я не понимаю, как указать запрос для получения количества связанных.
В моем примере Agthemes принадлежит Agplans.
И в БД 4 Agthemes принадлежат Agplan id 22 и 1 Agthemes принадлежит Agplan идентификатор 23.

В настоящее время я написал следующий запрос, который возвращает число 5 в массиве Agthemes первого массива Agplans и пустой массив 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();

Как правильно написать этот запрос?


person fralbo    schedule 29.04.2016    source источник


Ответы (2)


вы также должны сгруппировать Agthemes

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

Другой способ для hasMany instances. Обратите внимание, что leftJoin вместо содержит.

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