2010-05-30 2 views
1

나는 다음과 같은 관계로 몇 테이블이 : 나는 테이블 '모델과 함께 내 모든 외래 키가 제대로 설정되어있어CakePHP :이 찾기 호출을 어떻게 변경하여 관련 테이블에없는 모든 레코드를 포함 할 수 있습니까?

회사 hasMany의 채용, 직원 및 트럭, 사용자, 컨트롤러 , 및보기.

원래 Jobs 테이블에는 "assigned"라는 부울 필드가있었습니다. 다음 찾기 작업 (JobsController의)은 모든 직원, 모든 트럭 및 이 아닌이 할당되어 단일 회사의 특정 날짜에 해당 작업을 반환합니다 (포함 할 수있는 동작을 사용하여 사용자를 돌려 보내지 않음).

$this->set('resources', $this->Job->Company->find('first', array(
    'conditions' => array(
    'Company.id' => $company_id 
), 
    'contain' => array(
    'Employee', 
    'Truck', 
    'Job' => array(
     'conditions' => array(
     'Job.assigned' => false, 
     'Job.pickup_date' => date('Y-m-d', strtotime('Today')); 
    ) 
    ) 
) 
))); 

이제이 코드를 작성한 이후 작업 할당을 통해 더 많은 작업을 수행하기로 결정했습니다. 그래서 나는 belongsTo 트럭과 belongsTo Job이라는 새로운 모델 "Assignment"를 만들었습니다. 트럭 모델과 작업 모델에 hasMany 할당을 추가했습니다. 다른 할당 필드와 함께 할당 테이블에 외래 키가 있습니다.

이제 작업 테이블에서 할당 된 필드를 확인하는 대신 위와 동일한 정보를 얻으려고합니다. 작업이 존재하지 않는지 확인하기 위해 할당 테이블을 확인하고 싶습니다. mysql 오류로 인해 find 메소드의 "조인"기능을 사용하려는 경우 더 이상 포함 할 수있는 동작을 사용할 수 없습니다 (요리 책에 따라). 그러나 다음 쿼리는 다른 요일에도 불구하고 모든 작업을 반환합니다.

$this->set('resources', $this->Job->Company->find('first', array(
'joins' => array(
    array(
     'table' => 'employees', 
     'alias' => 'Employee', 
     'type' => 'LEFT', 
     'conditions' => array(
      'Company.id = Employee.company_id' 
     ) 
    ), 
    array(
     'table' => 'trucks', 
     'alias' => 'Truck', 
     'type' => 'LEFT', 
     'conditions' => array(
      'Company.id = Truck.company_id' 
     ) 
    ), 
    array(
     'table' => 'jobs', 
     'alias' => 'Job', 
     'type' => 'LEFT', 
     'conditions' => array(
      'Company.id = Job.company_id' 
     ) 
    ), 
    array(
     'table' => 'assignments', 
     'alias' => 'Assignment', 
     'type' => 'LEFT', 
     'conditions' => array(
      'Job.id = Assignment.job_id' 
     ) 
    ) 
), 
'conditions' => array(
    'Job.pickup_date' => $day, 
    'Company.id' => $company_id, 
    'Assignment.job_id IS NULL' 
) 
))); 

EDIT : 내 쿼리가 작동하면서 내 데이터에 문제가 발생하여 모든 배정이 반환되었습니다.

+0

코드가 생성하는 쿼리를 게시 할 수 있습니까? – bancer

답변

1

내 쿼리에는 아무런 문제가 없습니다. 할당 문제를 제대로 필터링하지 못하게하는 데이터 문제가있었습니다.

-1

Rember 조건 배열을 사용 찾기 방법 (발견의 조건 참조), 당신은 WHERE somefield! = 조건의 someValue와 종류를 필요로 가입 쿼리에 ON으로 번역한다 것이 조건

$this->Modelname->find('type',array=('conditions' => array('somefiled !=' => $value,'somemorefield <>' => $value)));

+0

이것은 옳지 않습니다. – Stephen