Я заранее извиняюсь, если открываю вопрос, который, возможно, уже задавался, но я не думаю, что нашел какие-либо результаты.
У меня проблема со следующей частью кода CakePHP:
$unavailable_resource_ids = $this->Resources->Unavailabilities
->find()
->select(['resource_id'])
->matching('Bookings', function ($q) {
return $q->where([
'Bookings.booking_status_id NOT IN ' => [6, 4, 3]
]);
})
->where([
'OR' => [
[
'Unavailabilities.start <= :start_date',
'DATE_ADD(Unavailabilities.end, INTERVAL '. $recovery_time .') >= :end_date'
],
[
'Unavailabilities.start <= :start_date',
'DATE_ADD(Unavailabilities.end, INTERVAL '. $recovery_time .') BETWEEN :start_date AND :end_date'
],
[
'Unavailabilities.start BETWEEN :start_date AND :end_date',
'DATE_ADD(Unavailabilities.end, INTERVAL '. $recovery_time .') >= :end_date'
],
[
'Unavailabilities.start >= :start_date',
'DATE_ADD(Unavailabilities.end, INTERVAL '. $recovery_time .') <= :end_date'
]
]
])
->bind(':start_date', $start_date_object, 'datetime')
->bind(':end_date', $end_date_object, 'datetime');
Мне нужно предоставить соответствующее значение переменной recovery_time
, которая будет извлечена из таблицы ресурсов, однако мне не удалось решить эту проблему.
Таблица resources
столбец:
id, description, model, recovery_time, etc....
Мне нужно, чтобы значение recovery_time
было вставлено в переменную recovery_time
, это может быть 1 день, 1 неделя и т. Д.
Iполучил решение , Я добавил подзапрос в ИНТЕРВАЛ, вот код, может быть, может быть полезен для кого-то еще.
$unavailable_resource_ids = $this->Resources->Unavailabilities
->find()
->select(['resource_id'])
->matching('Bookings', function ($q) {
return $q->where(['Bookings.booking_status_id NOT IN ' => [6, 4, 3]]);
})
->where([
'OR' => [
['Unavailabilities.start <= :start_date', 'DATE_ADD(Unavailabilities.end, INTERVAL (SELECT resources.recovery_time FROM resources WHERE id = Unavailabilities.resource_id) DAY) >= :end_date'],
['Unavailabilities.start <= :start_date', 'DATE_ADD(Unavailabilities.end, INTERVAL (SELECT resources.recovery_time FROM resources WHERE id = Unavailabilities.resource_id) DAY) BETWEEN :start_date AND :end_date'],
['Unavailabilities.start BETWEEN :start_date AND :end_date', 'DATE_ADD(Unavailabilities.end, INTERVAL (SELECT resources.recovery_time FROM resources WHERE id = Unavailabilities.resource_id) DAY ) >= :end_date'],
['Unavailabilities.start >= :start_date', 'DATE_ADD(Unavailabilities.end, INTERVAL (SELECT resources.recovery_time FROM resources WHERE id = Unavailabilities.resource_id) DAY) <= :end_date']
]
])
->bind(':start_date', $start_date_object, 'datetime')
->bind(':end_date', $end_date_object, 'datetime');`