CakePHP 3 - рассчитывать на глубокую ассоциацию - PullRequest
0 голосов
/ 16 мая 2018

У меня есть три таблицы users, campaigns и videos.

, и их отношение равно

users->hasMany('campaigns');
campaigns->hasMany('videos');

. Я хочу выбрать всех пользователей и сосчитать ихvideos записей.

Я могу фильтровать по конкретной таблице, как я могу сосчитать videos записей на $this->Videos->find().

Но как считать глубоко связанные в CakePHP 3?то есть, на Users?

Что я хочу, как

User object => [
    'email' => 'email@example.com'
    'name' => 'My Name'
    'post_videos_count' => 10
]
User object => [
    'email' => 'email2@example.com'
    'name' => 'User 2'
    'post_videos_count' => 50
]

, где email и name поля от Users и post_videos_count содержитколичество похожих видео.

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Использовать поведение кэша счетчика. Это эффективное и самое простое решение.

https://book.cakephp.org/3.0/en/orm/behaviors/counter-cache.html

0 голосов
/ 16 мая 2018

Возможно содержит & count :

$query = $users->find()->contain(['Campaigns' => ['Videos' => function ($q) {
    return $q->count('Video.id');
}]]);
...