我刚开始学习cakephp3,所以请原谅我有什么不妥。所以我有三个名为Users,Projects和Events的表,所以关系就像是,一个用户可以拥有多个项目,一个项目可以有很多事件。
如果我访问基本网址
testap /事件
我只希望这些事件出现在属于登录用户的列表中。 注意:事件表只有项目ID而不是用户ID,项目表有用户ID。
考虑以下场景
项目表
ID User_id
1 1
2 1
3 2
4 3
活动表
ID Project_id
1 1
2 1
3 1
4 2
5 2
6 3
7 4
所以我只想显示事件1到5,因为它们属于登录用户(比如id为1的用户已登录)
请告诉我怎样才能实现这个目标?
提前致谢
答案 0 :(得分:1)
新蛋糕3 orm非常适合这样的事情。
// You can replace $this->Users with TableRegistry::get('users')
// if not in the users controller
$user = $this->Users->find($this->Auth->user('id'), [
'contain' => [
'Projects.Events'
]
]);
你可以得到这样的活动
$user->projects[0]->events;
或者,如果您想要为特定用户获取活动,则可以向后执行
$events = $this->Events->find()->matching('Projects.Users', function ($query) use ($userId) {
return $query->where(['user_id' => $userId]);
});
我假设您已经在UsersTable初始化函数中定义了
$this->hasMany('Projects');
并在您的ProjectsTable中
$this->hasMany('Events');
$this->belongsTo('Users');
在你的活动表中
$this->belongsTo('Projects');