CakePHP 3.x中有多个belongsTo()关联

时间:2015-05-05 10:01:20

标签: cakephp cakephp-3.0

我正在使用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(),第二个字段就可以了,但不是第一个字段。

提前致谢

1 个答案:

答案 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'
]);

请注意,当您选择在架构中使用piloteverificateur作为列名时,您需要更改propertyName的值。这是因为Cake将使用该名称在您的实体中创建一个属性,它将与您表中的属性发生冲突。

这就是我必须选择pilote_user作为您实体的属性名称的原因。例如。

查询数据时,您需要将'contain' => ['Users', 'Verificateurs', 'Pilotes']添加到查找程序选项