2012-08-24 3 views
2

좋은 아침 실패와 성공,

나는 $ hasOne의 잘 작동하더라도, $ hasMany의에 문제가 있어요.

두 모델 Assignment 및 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); 

내가 대신 $ hasMany의의 $ hasOne의를 사용하여 내가 예상 결과를 얻을.

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

그러나 $ hasMany를 사용할 때 상황이 무너집니다. 쿼리에 JOIN이 없습니다.

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

누구나 무슨 일이 일어나고 있는지 설명하고 해결책을 제안 할 수 있습니까? 도와 주셔서 감사합니다.

+0

내가 CakePHP는 정말 익숙하지 해요,하지만 외부 키가 할당 모델에있을 shouldn? – 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을 사용해 보시고, contain을 사용하면 문제가 될 수도 있습니다.

+0

제안 된 변경 사항을 모두 (재귀 = 1) 사용했지만 할당 배열이 여전히 비어 있습니다. . – user1449855

+0

'$ belongsTo' 배열 안에'foreignKey' 키가 필요할 수도 있습니다. 이후 (책 당) "이 키의 기본값은 _id로 끝나는 다른 모델의 밑줄이 쳐진 단일 이름입니다." 그러나, 귀하의 모델 이름이'AssignmentGroup'이지만 키가'assign_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