协会发现错误的表

时间:2014-09-20 07:49:17

标签: cakephp tree cakephp-3.0

我正在尝试为我的DomainTypes view()函数包含我的DomainTypes表的Children,但是它抱怨"错误:SQLSTATE [42S22]:找不到列:1054未知列' Children .domain_type_id'在' where子句'"问题是我的DomainTypes表没有domain_type_id列。域表有。以下是我的DomainTypes视图()的代码:

public function view($id) {
    if (!$id) {
        throw new NotFoundException(__('Invalid DomainType'));
    }

    $domainType = $this->DomainTypes
        ->find()
        ->where(['DomainTypes.id' => $id])
        ->contain(['Parent', 'Children', 'Affiliates'])
        ->first();

    $this->set(compact('domainType'));
}

关于我的设置。我有2个表,域和DomainTypes。两者都使用Tree行为。

以下是域表的初始化代码:

public function initialize(array $config){
    parent::initialize($config);

    $this->displayField('name');
    $this->addBehavior('Tree');

    //Associations
    $this->hasMany('Children', [
        'className' => 'Domains',
    ]);
    $this->belongsTo('Parent', [
        'className' => 'Domains',
    ]);
    $this->belongsTo('Affiliates');
    $this->belongsTo('DomainTypes');
}

这是DomainTypes表的初始化代码:

public function initialize(array $config){
    parent::initialize($config);

    $this->displayField('name');
    $this->addBehavior('Tree');

    //Associations
    $this->hasMany('Children', [
        'className' => 'DomainTypes',
    ]);
    $this->belongsTo('Parent', [
        'className' => 'DomainTypes',
    ]);
    $this->belongsTo('Affiliates');
    $this->hasMany('Domains');
}

两者非常相似,但也明确定义了要使用的className。为什么Cakephp 3假设我的DomainTypes表上有一个domain_type_id列?提前谢谢!

2 个答案:

答案 0 :(得分:0)

更新我没有正确关注,当CakePHP自动生成名为domain_type_id的外键时,它实际上是正确的,它是hasMany parent_id 1}}关联,因此FK应该基于源表。

解决方案仍然相同,FK需要明确设置,正如@MjGaiser已经知道的那样,belongsTo关联的hasMany是不必要的,而不是FK对于parent_id关联,应使用child_id代替 $this->hasMany('Children', [ 'className' => 'DomainTypes', 'foreignKey' => 'parent_id' ]); $this->belongsTo('Parent', [ 'className' => 'DomainTypes' ]);

{{1}}

答案 1 :(得分:0)

我们都很接近,但不太对劲。 ndm,你的回答很有帮助,因为它确实指出了我正在制造的另一个错误。最终的关联代码应如下所示:

    $this->hasMany('Children', [
        'className' => 'DomainTypes',
        'foreignKey' => 'parent_id',
    ]);
    $this->belongsTo('Parent', [
        'className' => 'DomainTypes',
    ]);

当我尝试输入外键时,而不是" foreignKey",我正在使用" foreign_key"这几乎没用。谢谢你的帮助ndm。