我有三个表users
、campaigns
和videos
。
他们的关系就像
users->hasMany('campaigns');
campaigns->hasMany('videos');
我想要的是选择所有用户并计算他们的videos
记录。
我可以按特定表进行过滤,就像我可以在$this->Videos->find()
上计算videos
条记录一样。
但是如何在 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
包含相关视频的数量。
可能包含和计数:
$query = $users->find()->contain(['Campaigns' => ['Videos' => function ($q) {
return $q->count('Video.id');
}]]);
使用计数器缓存行为。这是高效且最简单的解决方案。
https://book.cakephp.org/3.0/en/orm/behaviors/counter-cache.html