我有一些具有以下关系的表:
公司有许多工作、员工和卡车、用户
我已经正确设置了所有外键,以及表的模型、控制器和视图。
最初,Jobs 表有一个名为“assigned”的布尔字段。以下 find 操作(来自 JobsController)成功返回了单个公司的所有员工、所有卡车和任何未分配且在某一天落下的工作(没有通过利用可包含行为返回用户):
$this->set('resources', $this->Job->Company->find('first', array(
'conditions' => array(
'Company.id' => $company_id
),
'contain' => array(
'Employee',
'Truck',
'Job' => array(
'conditions' => array(
'Job.assigned' => false,
'Job.pickup_date' => date('Y-m-d', strtotime('Today'));
)
)
)
)));
现在,自从编写了这段代码,我决定在工作分配上做更多的事情。所以我创建了一个属于卡车和属于工作的新模型“分配”。我已将 hasMany 分配添加到 Truck 模型和 Jobs 模型。我在分配表中有两个外键,以及其他一些分配字段。
现在,我试图获取上面相同的信息,只是不想检查作业表中的分配字段,而是要检查分配表以确保该作业不存在。如果由于 mysql 错误(根据说明书)而要使用 find 方法的“joins”功能,我将无法再使用可包含的行为。但是,以下查询会返回所有工作,即使它们属于不同的日期。
$this->set('resources', $this->Job->Company->find('first', array(
'joins' => array(
array(
'table' => 'employees',
'alias' => 'Employee',
'type' => 'LEFT',
'conditions' => array(
'Company.id = Employee.company_id'
)
),
array(
'table' => 'trucks',
'alias' => 'Truck',
'type' => 'LEFT',
'conditions' => array(
'Company.id = Truck.company_id'
)
),
array(
'table' => 'jobs',
'alias' => 'Job',
'type' => 'LEFT',
'conditions' => array(
'Company.id = Job.company_id'
)
),
array(
'table' => 'assignments',
'alias' => 'Assignment',
'type' => 'LEFT',
'conditions' => array(
'Job.id = Assignment.job_id'
)
)
),
'conditions' => array(
'Job.pickup_date' => $day,
'Company.id' => $company_id,
'Assignment.job_id IS NULL'
)
)));
编辑:事实证明,我的查询有效,我的数据存在问题,导致所有分配都被返回。