2016-04-26 49 views
0

一辆汽车都会有色差的服务,或许将有一个轮胎服务CakePHP的条件

我使用这些表:汽车,car_service,证书,颜色和轮胎。

使用CAKEPHP条件,如何列出颜色服务的日期和(如果存在)轮胎服务的日期此行也将具有颜色服务证书的标识。

我需要这个查询:

`SELECT 
    certificate.date, 
    cs.date, 
    csl.date, 
    car.model, 
    tires.brand, 
    car.color 
FROM car 
INNER JOIN car_service cs ON cs.color_id = color.id 
LEFT JOIN certificate cert ON cert.color_id = cs.color_id` 

所以我最终有像这样的一个表:

`Service 
------- 
service_id| color_id | tires_id | date 
111  | 123  |   | 2016-26-04 08:00:00 
112  | 123  | 456  | 2016-27-04 09:00:00` 

我需要得到证书日期,为服务111,为服务112

我尝试这一点,但只是把轮胎服务的日期:

$certified= $this->find('first', 
     Array('conditions' => Array('Car.plate' => $plate, 
           'CarService.color_id= color.id', 
), 
'type' => 'LEFT', 
'contain' => Array(
    'Car', 
    'Color' => array('Certificate'), 
    'Tires' => array('Certificate') 
), 
'order' => array('CarService.created DESC'), 
'recursive' => -1 
) 
); 

`

+2

可能会尝试清理您的示例代码。阅读越容易,你就越有可能得到你的答案。此外,请确保包含您正在使用的Cake版本。 – Dave

+0

只需更新问题。 –

+0

但没有我的建议更新。 :/ – Dave

回答

2

您使用LEFT,但实际上并没有使用任何JOIN s的这样做。

只需加入LEFT即可使用JOIN。您需要实际添加“连接”到类似于此示例的阵列:

'joins' => array(
    array(
     'table' => 'car_services', 
     'alias' => 'CarService', 
     'type' => 'INNER', 
     'conditions' => array(
      'CarService.color_id = Color.id' 
     ) 
    ), 
    array(... // put your left join here 
),