如何显示与登录用户关联的行

时间:2017-08-31 15:02:57

标签: mysql join authorization cakephp-3.0

我刚开始学习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的用户已登录)

请告诉我怎样才能实现这个目标?

提前致谢

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');