Cakephp 关联查找错误表

Cakephp 关联查找错误表,cakephp,tree,cakephp-3.0,Cakephp,Tree,Cakephp 3.0,我试图为我的DomainTypes视图函数获取并包含我的DomainTypes表的子项,但它出现错误:SQLSTATE[42S22]:找不到列:1054未知列“Children.domain\u type\u id”在“where子句”中问题是我的DomainTypes表没有domain\u type\u id列。域表没有。以下是my DomainTypes视图的代码: public function view($id) { if (!$id) { throw new N

我试图为我的DomainTypes视图函数获取并包含我的DomainTypes表的子项,但它出现错误:SQLSTATE[42S22]:找不到列:1054未知列“Children.domain\u type\u id”在“where子句”中问题是我的DomainTypes表没有domain\u type\u id列。域表没有。以下是my 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个表、域和域类型。两者都使用树行为

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

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');
}
两者非常相似,但也清楚地定义了要使用的类名。为什么Cakephp 3假设我的DomainTypes表上有一个domain\u type\u id列?提前谢谢

更新我没有注意到,CakePHP在自动生成名为domain_type_id的外键时似乎是正确的,这是一个hasMany关联,因此FK应该基于源表

解决方案仍然是一样的,需要明确设置FK,正如@MjGaiser已经指出的,belongsTo关联的父id是不必要的,而hasMany关联的FK应该使用父id而不是子id:


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

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

当我试图输入外键,而不是外键时,我使用的是外键,这几乎是无用的。谢谢你的帮助

如果我只使用belongsTo关系,这是有道理的,但不应该有孩子的id,因为hasMany应该使用孩子的家长id。如果你同时有家长id和孩子id,你将复制数据,并打开你的网站,以解决更多的问题。还是我不明白你要去哪里?@MjGaiser不,你是对的,我只是没有注意到,不应该有child\u id,CakePHP生成一个名为domain\u type\u id的FK实际上似乎是正确的。我将更新我的答案并删除这些废话:
    $this->hasMany('Children', [
        'className' => 'DomainTypes',
        'foreignKey' => 'parent_id',
    ]);
    $this->belongsTo('Parent', [
        'className' => 'DomainTypes',
    ]);