0
我有麻煩從第三個表中獲取記錄時,當我把條件。我收到錯誤丟失列MonthlyReturns丟失。但是,如果我拿走了月度返回條件,我會得到所有3個關聯的表。cakephp hasmany與條件
的表是公司,員工和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' => ''
)
);
UPDATE:
我有試圖做一個左連接。現在我收回所有記錄,並且沒有顯示在當月的ReturnReturns中沒有記錄的員工。
我得到的SQL是
[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);
更新2
我設法得到通過使用SQL diectly我想要的記錄。我不喜歡這樣做,所以如果有人知道正確的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");
快速建議,當深入探討關係和應用條件時,試圖研究可遏制的行爲。 – Ankit 2013-03-08 17:27:45
是的,我已經開始看它,謝謝 – 2013-03-08 17:55:44