刚开始学习cakephp3,有什么不对的地方还请见谅。所以我有三个表,分别称为用户、项目和事件,所以它们之间的关系就像一个用户可以有多个项目,一个项目可以有多个事件。
如果我访问基本的url
testap/events
我只希望那些事件出现在属于登录用户的列表中。 注意:Event表只有project id没有user id,project表有user 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 的用户已登录)
请告诉我怎样才能做到这一点?
提前致谢
最佳答案
新的 cake 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');
关于mysql - 如何显示与登录用户关联的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45984635/