2017-08-31 41 views
1

我刚开始学习cakephp3,所以请原谅我的错误。所以我有三个名为用户,项目和事件的表,所以关系就像一个用户可以有多个项目,一个项目可以有很多事件。如何显示与登录用户相关的行

,如果我访问的基本URL

testap /事件

我想只有那些事件出现在属于登录的用户列表。 注意:事件表只有项目标识不是用户标识,项目表有用户标识。

考虑以下方案

Projcts表

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 

所以我只想为他们属于登录的用户(比如用户显示事件1to5以身份证1已经登录)

请告诉我该如何做到这一点?

在此先感谢

+0

这会帮助你https://book.cakephp.org/2.0/en/models/associations-linking-models- together.html –

+0

他说蛋糕3.这可能是一个更好的选择[检索数据](https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html) – styks

回答

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

谢谢这么多的帮助。它为我工作:) –