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

标签 mysql join authorization cakephp-3.0

刚开始学习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/

相关文章:

Mysql 查询 : LEFT JOIN List all orders and "balance due" for a customer, 如果没有订单,则列出客户。 3 table

azure - MSAL Azure B2C : which field do I send as bearer token to make authorized API requests?

php - Mysql/PHP 引用问题!

mysql - 在 MySQL 中旋转 - 一次只能在一行上工作?

MySQL问题(连接)

http - 为什么我的授权 header 不需要 "Bearer"?

function - 通过数据库触发器邀请用户的授权

php - 昨天sql调用

php - 我应该如何在我的网站上实现 "like"计数器? (不是 Facebook )

MySQL 触发器通知客户端