我有这些关系:
出勤属于员工
日程属于员工
此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()很干,不想在这里乱七八糟。
非常感谢任何帮助。
答案 0 :(得分:0)
当您使用contain()
时,它会执行单个查询。在您的示例中,它实际上将单独执行三个查询,然后由CakePHP组合到返回的数据数组中。
因此,您不能使用其他模型中的字段来对包含的模型进行调节。
您最好的选择是首先查询字段,然后在此查找中使用它的值,或使用joins(),这会使所有结果从单个查询返回,而不是从三个单独的查询返回。
旁注 - 看起来你正在Controller中构建这个查询 - 遵循MVC结构,最佳做法是将所有查询保留在模型中,而不是控制器 - 然后只需调用Model的方法(具有{{ 1}})从Controller中检索结果。