加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

CakePHP 3中同一模型的多个关联

发布时间:2020-12-13 18:06:05 所属栏目:PHP教程 来源:网络整理
导读:我正在使用cake PHP版本3.x. 当我查询MessagesTable时,我想获取发件人和邮件接收者的用户数据.我已经在cakePHP 2中多次这样做但我无法弄清楚为什么它在版本3.x中不起作用. 我有一个UsersTable和一个MessagesTable. UsersTable $this-hasMany('Messages'); Me
我正在使用cake PHP版本3.x.

当我查询MessagesTable时,我想获取发件人和邮件接收者的用户数据.我已经在cakePHP 2中多次这样做但我无法弄清楚为什么它在版本3.x中不起作用.

我有一个UsersTable和一个MessagesTable.

UsersTable

$this->hasMany('Messages');

MessagesTable

$this->belongsTo('Users',[
    'foreignKey' => 'sender_id','propertyName' => 'Sender',]);
$this->belongsTo('Users',[
    'foreignKey' => 'user_id','propertyName' => 'Receiver'
]);

这是我正在使用的查询

$messages = $this->Messages->find()
        ->where(['Messages.user_id' => $this->Auth->user('id')])
        ->orwhere(['Messages.sender_id' => $this->Auth->user('id')])
        ->order(['Messages.created' => 'DESC'])
        ->contain([
            'Users.Pictures',]);

我收回了Receiver数据,但也没有收到Sender数据.任何帮助将非常感激

你的关联是错的.如果对多个关联使用相同的模型,则需要使用不同的别名和className属性(就像在CakePHP 2中一样): –
$this->belongsTo('Sender',[
    'className' => 'Users','foreignKey' => 'sender_id','propertyName' => 'sender',]);
$this->belongsTo('Receiver','foreignKey' => 'user_id','propertyName' => 'receiver'
]);

这是described in the docs.

在您的示例代码中,Receiver会覆盖User的关联,因此您只能在结果中看到Receiver模型.

您的查询需要是这样的: –

$messages = $this->Messages->find()
    ->where(['Messages.user_id' => $this->Auth->user('id')])
    ->orwhere(['Messages.sender_id' => $this->Auth->user('id')])
    ->order(['Messages.created' => 'DESC'])
    ->contain([
        'Receivers' => ['Pictures'],'Senders' => ['Pictures']
    ]);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读