我有几张表有以下关系:
公司拥有多个工作,员工和卡车,用户
我已经正确设置了所有外键,以及表格的模型,控制器和视图。
最初,Jobs表有一个名为“assigned”的布尔字段。以下查找操作(来自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 Assignments添加到Truck模型和Jobs模型中。我在赋值表中有两个外键,以及其他一些赋值字段。
现在,我正在尝试获取上面相同的信息,而不是检查作业表中指定的字段,我想检查赋值表以确保该作业不存在。如果由于mysql错误我将使用find方法的“连接”功能(根据cookbook),我不能再使用可包含的行为。但是,以下查询将返回所有作业,即使它们属于不同的日期。
$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'
)
)));
编辑:事实证明,我的查询有效,我的数据出现问题导致所有作业都被退回。
答案 0 :(得分:1)
我的查询没有错。事实证明,有一个数据问题阻止我正确过滤分配。
答案 1 :(得分:-1)
Rember这个条件将在JOIN查询中转换为ON,在那里你需要一个WHERE somefield!= somevalue种类的条件,在find方法中使用条件数组(参见find中的条件)
$this->Modelname->find('type',array=('conditions' => array('somefiled !=' => $value,'somemorefield <>' => $value)));