выберите количество (*) в подзапросе - cakephp 3.6 - PullRequest
0 голосов
/ 26 октября 2018

Я пытался написать этот запрос в cakephp 3.6:

SELECT `Group`.`id`, `Group`.`name`, `Group`.`created`, `Group`.`modified`, (SELECT count(*)
                            FROM `positions` where Group.id = positions.group_id) AS "count" FROM `groups` AS `Group`

Я могу использовать необработанный запрос, чтобы получить результат, но как использовать ORM \ Query для реализации этого?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Наконец я нашел решение:

$position = TableRegistry::getTableLocator()->get('Positions');
        $q = $position->find();
        $q->select([$q->func()->count('*')])
                    ->where(['Positions.group_id = Groups.id']);
        $query = $this->Groups->find()
         ->select(['id',  'name', 'created', 'modified' , 'count' => $q]);

При проверке журнала я получаю:

SELECT Groups.id AS `Groups__id`, Groups.name AS `Groups__name`, Groups.created AS `Groups__created`, Groups.modified AS `Groups__modified`, (SELECT (COUNT(*)) FROM positions Positions WHERE Positions.group_id = Groups.id) AS `count` FROM groups Groups
0 голосов
/ 26 октября 2018

Что-то нравится.

$query = $this->Groups->find();
$query->select([
        'Groups.id',
        'Groups.name', 
        'Groups.created', 
        'Groups.modified',
        'count' => $query->func()->count('Positions.id')
    ])->leftJoinWith('Positions')
      ->group('Groups.id');
...