cakephp包含父模型值的过滤

时间:2012-11-30 01:34:13

标签: cakephp

我有这些关系:

出勤属于员工

日程属于员工

此find()可以很好地获取日期范围内的所有出勤记录。

    $data = $this->Attendance->find('all', array(
        'contain' => array(
            'Employee' => array(
                'Schedule' => array(
                    'conditions' => array('sche_status' => 1),
                    'order' => 'sche_valid DESC',
                    'limit' => 1
            ))
        ),
        'conditions' => $conditions,
        'order' => array('employee_id', 'att_date')
            )
    );

但是,这个附表条件

'conditions' => array('sche_status' => 1),

获取“当前”时间表。问题是员工在日期范围内有多个计划。 为了获得它的父母出勤记录的相关时间表,我还需要 Attendance.att_date的条件

尝试

'conditions' => array('sche_status' => 1, 'ho_valid <=' => Attendance.att_date)

'conditions' => array('sche_status' => 1, 'ho_valid <=' => $this->Attendance.att_date)

如何从contan Schedule条件中引用Attendance.att_date?那可能吗? 我当前的数据集非常干净,我的find()很干,不想在这里乱七八糟。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

当您使用contain()时,它会执行单个查询。在您的示例中,它实际上将单独执行三个查询,然后由CakePHP组合到返回的数据数组中。

因此,您不能使用其他模型中的字段来对包含的模型进行调节。

您最好的选择是首先查询字段,然后在此查找中使用它的值,或使用joins(),这会使所有结果从单个查询返回,而不是从三个单独的查询返回。

旁注 - 看起来你正在Controller中构建这个查询 - 遵循MVC结构,最佳做法是将所有查询保留在模型中,而不是控制器 - 然后只需调用Model的方法(具有{{ 1}})从Controller中检索结果。