2013-03-08 2 views
0

조건을 입력 할 때 세 번째 테이블에서 레코드를 가져 오는 데 문제가 있습니다. MonthlyReturns 열이 누락되었습니다. 그러나 MonthlyReturns 조건을 없애면 3 개의 관련 테이블이 모두 생깁니다.cakephp에 조건이 있습니다.

표는 회사, 직원, MonthlyReturns 있습니다

MonthlyReturnsController.php 나의 찾기 코드 :

$conditions = array("Employee.active" => true, "Employee.start" => $start, "NOT" => array("MonthlyReturn.month" => $date)); 
$empl = $this->MonthlyReturn->Employee->find('all', array('conditions' => $conditions)); 

직원 모델 :

/** 
* belongsTo associations 
* 
* @var array 
*/ 
public $belongsTo = array(
    'Company' => array(
     'className' => 'Company', 
     'foreignKey' => 'company_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 

/** 
* hasMany associations 
* 
* @var array 
*/ 
public $hasMany = array(
    'MonthlyReturn' => array(
     'className' => 'MonthlyReturn', 
     'foreignKey' => 'employee_id', 
     'dependent' => false, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'exclusive' => '', 
     'finderQuery' => '', 
     'counterQuery' => '' 
    ) 
); 

업데이트 : 내가 가진

왼쪽 조인을 시도했다. 이제는 모든 기록을 다시 가져와 MonthlyReturns에 기록이없는 직원을 날짜로 표시하지 않습니다.

내가 얻는 SQL 내가 diectly SQL을 사용하여 내가 원하는 레코드를 얻기 위해 관리해야 2

UPDATE

[query] => SELECT `Employee`.`id`, `Employee`.`company_id`,`Employee`.`p45_issued`, `Company`.`id`, `Company`.`member_number` 
FROM `employees` AS `Employee` 
left JOIN `monthly_returns` AS `MonthlyReturn` ON (`MonthlyReturn`.`employee_id` = `Employee`.`id`) 
LEFT JOIN `companies` AS `Company` ON (`Employee`.`company_id` = `Company`.`id`) 
WHERE NOT (`MonthlyReturn`.`month` = '2013-03-01') 

$options['joins'] = array(
    array('table' => 'monthly_returns', 
     'alias' => 'MonthlyReturn', 
     'type' => 'left', 
     'conditions' => array(
      'MonthlyReturn.employee_id = Employee.id' 
     ) 
    ), 
); 

$options['conditions'] = array("Employee.p45_issued" => false, "NOT" => array("MonthlyReturn.month" => $last_month)); 


$empl = $this->MonthlyReturn->Employee->find('all', $options); 

입니다. 나는 누군가가 올바른 cakephp 방법을 알고 있다면 그래도 이렇게하고 싶지 않니?

$emps_overdue = $this->Employee->query("SELECT employees.*, companies.`name`, companies.`id` 

    FROM employees INNER JOIN companies ON employees.company_id = companies.id 

    LEFT JOIN monthly_returns ON monthly_returns.employee_id = employees.id 

    AND monthly_returns.month = '$last_month' 

    WHERE monthly_returns.id IS NULL AND employees.p45_issued = false"); 
+0

관계에 깊이 들어가고 조건을 적용 할 때 포함 할 수있는 행동을 조사하려고 할 때 빠른 제안. – Ankit

+0

예 감사합니다. 감사합니다. –

답변

0

포함 할 수있는 동작을 살펴보면 작업을 쉽게 할 수 있습니다.