2012-08-24 64 views
2

早上好,

我有麻煩$ hasMany,即使$ hasOne工作正常。

我有兩個模型,Assignment和AssignmentGroup。分配可以有一個AssignmentGroup,但AssignmentGroup可以有很多分配。這裏有關係:

class Assignment extends AppModel { 
    public $belongsTo = array('AssignmentGroup'); 
} 

class AssignmentGroup extends AppModel { 
    public $hasMany = array(
     'Assignment' => array('foreignKey'=>'assignment_group_id), 
    ); 
} 

這裏是我運行代碼:

$this->AssignmentGroup->Behaviors->load('Containable'); 
$params = array(
    'conditions' => array('AssignmentGroup.class_id' => $class_id), 
    'contain' => array('Assignment'), 
); 
$result = $this->AssignmentGroup->find('all', $params); 

當我使用$ hasOne而不是$的hasMany我得到預期的結果。

$result = array(
    'AssignmentGroup => array(
     [several elements] 
    ), 
    'Assignment' => array(
     [more elements] 
    ), 
); 

但是,當我使用$ hasMany,因爲我需要,事情崩潰了。該查詢沒有JOIN。

$result = array(
    'AssignmentGroup => array(
     [several elements] 
    ), 
    'Assignment' => array(), 
); 

任何人都可以解釋發生了什麼和/或提出解決方案嗎?謝謝您的幫助。

+0

我不是很熟悉CakePHP的,但不應該外鍵是在分配模式? – Matt

+0

你有沒有得到它的工作?我有同樣的問題:http://stackoverflow.com/questions/37946705/cakephp-2-8-4-ignoring-hasmany –

回答

1

這可能很小,但我總是確保我在模型定義中使用className

var $hasMany = array(
    'Assignment' => array(
     'className' => 'Assignment', 
     'foreignKey' => 'assignment_group_id', 
    ), 
); 

只要是安全的,因爲這本書並說:「每個模型的別名必須是唯一的應用廣泛」它幫助我保持這些直線。

此外,嘗試使用$hasMany,但只是爲了看看這可能是什麼讓你搞砸了。

+0

我做了所有建議的更改(與遞歸= 1),但Assignment數組仍然是空的。 – user1449855

+0

您也可能需要'$ belongsTo'數組中的'foreignKey'鍵。由於(每本書)「此鍵的默認值是其他模型的下劃線,單數名稱,後綴爲_id。」 但是,我注意到您的模型名稱是'AssignmentGroup',但您的關鍵字是'assignment_group_id'(帶有下劃線)。這可能是問題。 –

+0

完成。不幸的是,這也沒有解決問題。 – user1449855

0
class AssignmentGroup extends AppModel { 
    public $hasMany = array(
     'Assignment' => array('foreignKey'=>'assignment_group_id), 
    ); 
} 

應該是:

class AssignmentGroup extends AppModel { 
public $hasMany = array(
    'Assignment' => array('foreignKey'=>'assignment_group_id'), 
); 
} 
+0

是的。我只是複製並粘貼錯誤:P – user1449855