我有三个表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
包含相关视频的数量。
答案 0 :(得分:1)
$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