我正在使用CakePHP 3.x.
我的问题是:是否可以使用相同的外键具有许多belongsTo()关联?
这是我的问题:
我的表中有三个字段使用相同的外键。
在模型表中,我以这种方式使用了belongsTo()关联:
$this->belongsTo('Pilotes', [
'className' => 'Users',
'foreignKey' => 'pilote',
'propertyName' => 'pilote_user'
]);
$this->belongsTo('Verificateurs', [
'className' => 'Users',
'foreignKey' => 'no_user',
'propertyName' => 'verificateur_user'
]);
$this->belongsTo('Users', [
'className' => 'Users',
'foreignKey' => 'no_user',
'propertyName' => 'user'
]);
但是当我调试我的实体时,两个第一个字段只包含外键,最后一个字段没问题。
查询:
public function view($id = null)
{
$demande = $this->Demandes->get($id, [
'contain' => ['Users']
]);
$this->set('demande', $demande);
$this->set('_serialize', ['demande']);
}
这是debug()的输出:
object(App\Model\Entity\Demande) {
'new' => false,
'accessible' => [
'pilote' => true,
'verificateur' => true,
'pilote_user' => true,
'verificateur_user' => true,
'user' => true,
],
'properties' => [
'no_demande' => (int) 4,
'pilote' => (int) 3,
'verificateur' => (int) 2,
'no_user' => (int) 1,
'user' => object(App\Model\Entity\User) {
/* Details of the user */
},
],
'dirty' => [],
'original' => [],
'virtual' => [],
'errors' => [],
'repository' => 'Demandes'
}
如果我评论我的上一个belongsTo(),第二个字段就可以了,但不是第一个字段。
提前致谢
答案 0 :(得分:3)
更改第一个参数中的名称:
$this->belongsTo('Pilotes', [
'className' => 'Users',
'foreignKey' => 'pilote',
'propertyName' => 'pilote_user'
]);
$this->belongsTo('Verificateurs', [
'className' => 'Users',
'foreignKey' => 'verificateur',
'propertyName' => 'verificateur_user'
]);
$this->belongsTo('Users', [
'className' => 'Users',
'foreignKey' => 'no_user',
'propertyName' => 'user'
]);
请注意,当您选择在架构中使用pilote
和verificateur
作为列名时,您需要更改propertyName
的值。这是因为Cake将使用该名称在您的实体中创建一个属性,它将与您表中的属性发生冲突。
这就是我必须选择pilote_user
作为您实体的属性名称的原因。例如。
查询数据时,您需要将'contain' => ['Users', 'Verificateurs', 'Pilotes']
添加到查找程序选项