2014-09-20 62 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。