[英]Multiple Associations to the Same Model in CakePHP 3
我正在使用cakePHP版本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', [
'className' => 'Users',
'foreignKey' => 'user_id',
'propertyName' => 'receiver'
]);
這在文檔中描述 。
在您的示例代碼中, 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']
]);
謝謝你的幫助@drmonkeyninja。 我發現了什么問題,我需要做的就是調用我在MessagesTable中定義的用戶關聯,我現在感覺很蠢。
MessagesTable
$this->belongsTo('Sender', [
'className' => 'Users',
'foreignKey' => 'sender_id',
'propertyName' => 'Sender',
]);
$this->belongsTo('Receiver', [
'className' => '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([
'Sender',
'Receiver'
])
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.