2016-04-26 2 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 с.

Просто добавьте 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 
),