2014-09-20 64 views
0

我试图让我的DomainTypes的儿童的DomainTypes表为我的DomainTypes视图()函数,但它抱怨“错误:SQLSTATE [42S22]:未找到列:1054未知列'Children.domain_type_id 'in'where clause'“问题是我的DomainTypes表没有domain_type_id列。 Domain表的确如此。这里是我的域名类型视图()的代码:关联查找错误的表

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。两者都使用树行为。

这里是一个域表的初始化代码:

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_type_id列?提前致谢!

回答

0

更新我没注意正确和CakePHP似乎是实际上是正确的,当它自动生成一个名为domain_type_id一个外键,这是一个hasMany协会等的FK应该基于源表。

该解决方案仍然是一样的,FK需要显式地设置,并且已经@MjGaiser的parent_idbelongsTo协会想通是没有必要的,取而代之的是FK为hasMany协会应使用parent_id代替child_id

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

如果我只使用belongsTo关系,这样做会有意义,但是因为hasMany应该使用childrens parent_id,所以不应该有“child_id”。如果你有一个parent_id和一个child_id,你会复制数据并打开你的网站,出现很多问题。或者我不明白你要去哪里? – MjGaiser 2014-09-20 14:36:22

+0

@MjGaiser不,你说得对,我只是没有注意到,应该没有'child_id',CakePHP生成一个名为'domain_type_id'的FK实际上似乎是正确的。我会更新我的答案,并删除废话:) – ndm 2014-09-20 16:05:25

0

我们都很接近但并不完全正确。 ndm,你的回答很有帮助,但它指出我犯的另一个错误。最终的关联代码应该是这样的:

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

当我试图进入外键,而是“外键”的,我用的是这是几乎无用“foreign_key”。感谢帮助ndm。