CakePHP 3 - 依靠深层联想

时间:2018-05-16 11:06:47

标签: cakephp cakephp-3.0

我有三个表userscampaignsvideos

和他们的关系就像

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
]

其中emailname字段来自Users,而post_videos_count包含相关视频的数量。

2 个答案:

答案 0 :(得分:1)

可能contain& count

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

答案 1 :(得分:1)

使用计数器缓存行为。它是高效且最简单的解决方案。

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