我試圖讓我的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列?提前致謝!
如果我只使用belongsTo關係,這樣做會有意義,但是因爲hasMany應該使用childrens parent_id,所以不應該有「child_id」。如果你有一個parent_id和一個child_id,你會複製數據並打開你的網站,出現很多問題。或者我不明白你要去哪裏? – MjGaiser 2014-09-20 14:36:22
@MjGaiser不,你說得對,我只是沒有注意到,應該沒有'child_id',CakePHP生成一個名爲'domain_type_id'的FK實際上似乎是正確的。我會更新我的答案,並刪除廢話:) – ndm 2014-09-20 16:05:25