Wis*_*d0m 8 php cakephp belongs-to model-associations cakephp-3.0
我正在使用cakePHP版本3.x.
当我查询MessagesTable时,我想获取发送者和消息接收者的用户数据.我已经在cakePHP 2中多次这样做但我无法弄清楚为什么它不能在3.x版本中运行.
我有一个UsersTable和一个MessagesTable.
UsersTable
$this->hasMany('Messages');
Run Code Online (Sandbox Code Playgroud)
MessagesTable
$this->belongsTo('Users', [
'foreignKey' => 'sender_id',
'propertyName' => 'Sender',
]);
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'propertyName' => 'Receiver'
]);
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的查询
$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',
]);
Run Code Online (Sandbox Code Playgroud)
我收回了Receiver数据,但也没有收到Sender数据.任何帮助将非常感激
drm*_*nja 10
你的关联是错的.如果对多个关联使用相同的模型,则需要使用不同的别名和className属性(就像在CakePHP 2中一样): -
$this->belongsTo('Sender', [
'className' => 'Users',
'foreignKey' => 'sender_id',
'propertyName' => 'sender',
]);
$this->belongsTo('Receiver', [
'className' => 'Users',
'foreignKey' => 'user_id',
'propertyName' => 'receiver'
]);
Run Code Online (Sandbox Code Playgroud)
这在文档中描述.
在您的示例中,代码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']
]);
Run Code Online (Sandbox Code Playgroud)