Подсчет подключенных пользователей в списке CakePHP

У меня есть 3 модели (Адреса(заказы)/Пользователи/Города)

и я соединяю их через addresses_users(я знаю, что адреса должны быть с двумя d:/) и city_users.

Теперь у меня есть действие в контроллере адресов, которое должно дать мне список всех доступных городов, и я хочу подсчитать, сколько пользователей находится в этом городе (по соединению city_users.

//Get all cities
        $cities = $this->Cities->find('list', [
            'keyField' => 'id',
            'valueField' => function ($cities) {
                return $cities->get('full_info');
            }
            ,'order' => ['name' => 'asc']])
            ->contain(['Users']);

Я дошел до сих пор, но я не знаю, где я могу использовать функцию подсчета для всех содержащих пользователей. Любая идея или ссылка на документацию (https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#finding-key-value-pairs)


person Isengo    schedule 20.01.2017    source источник
comment
Я думаю, вам нужно получить данные из таблицы city_users. Почему вы сделали этот запрос в таблице городов?   -  person Manohar Khadka    schedule 21.01.2017


Ответы (1)


Вы можете построить такой запрос,

$query = $this->Cities->find();

$query->select(['users_count' => $query->func()->count('Users.id'),
                'city_name' => 'Cities.name']);
$query->leftJoinWith('CitiesUsers');
$query->group('Cities.id');
//debug($query->sql()); debug($query); //to check whether correct sql constructed
//debug($query->toArray());

Этот код не тестировался, я написал его для примера.

person N Nem    schedule 21.01.2017