2016-04-26 70 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 
),