簡體   English   中英

cakephp hasmany有條件

[英]cakephp hasmany with condition

當我在第三個表上放置條件時,我很難從該表中獲取記錄。 我收到錯誤缺少列MonthlyReturns的錯誤。 但是,如果我刪除了MonthlyReturns條件,則會得到所有3個關聯表。

這些表是公司,員工和月度收益

我在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是

[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來獲得我想要的記錄。 我不喜歡這樣做,所以如果有人知道正確的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");

嘗試研究可遏制的行為,這會使您的任務更輕松。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM