我正在尝试为我的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列?提前谢谢!
答案 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。