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

前端之家收集整理的这篇文章主要介绍了CakePHP 3中同一模型的多个关联前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用cake PHP版本3.x.

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

我有一个UsersTable和一个MessagesTable.

UsersTable

  1. $this->hasMany('Messages');

MessagesTable

  1. $this->belongsTo('Users',[
  2. 'foreignKey' => 'sender_id','propertyName' => 'Sender',]);
  3. $this->belongsTo('Users',[
  4. 'foreignKey' => 'user_id','propertyName' => 'Receiver'
  5. ]);

这是我正在使用的查询

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

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

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

这是described in the docs.

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

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

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

猜你在找的PHP相关文章