Отношение Laravel / Lumen — присоединиться к другой таблице, где условие извлекается неправильно

У меня возникла странная проблема с получением некоторых данных из базы данных при сравнении двух дат.

Структура базы данных:
Пользователи, бронирование, booking_services, services_price_history

На основании приведенных выше таблиц:
У пользователя много бронирований, у брони много сервисов, а у сервиса много ценовых историй.

Мне нужно принять все бронирования пользователей, а затем найти стоимость услуг на основе даты бронирования.

Проблема в том, что когда я добавляю условие сравнения даты, оно не учитывает его

Код:

$users = User::with(['reservations' => function($query) use ($department_id, $date_start, $date_end) {

// reservation services
$query->with(['reservation_services' => function($query) {
$query->join('reservations', 'reservation_services.reservation_id', 'reservations.id');
$query->join('services', 'reservation_services.service_id', 'services.id');

// Find the service price based on reservation date
$query->join('services_price_history', function($query) {
$query->on('reservations.salon_id', 'services_price_history.salon_id');
$query->on('reservation_services.service_id', 'services_price_history.service_id');

// this shoud be the condition that gives us the correct
// price based on the reservation date
$query->where('services_price_history.date_start', '<', 'reservations.date');
// then we use order and limit 1
});

$query->select(
'reservation_services.reservation_id',
'reservation_services.service_id',
'reservation_services.quantity',
'services_price_history.price',
'services_price_history.date_start',
'services.name',
DB::raw('(services_price_history.price * reservation_services.quantity) as total')
);
$query->orderBy('services_price_history.id', 'desc');
}]);
}])->get();

Это вывод:

[
{
"id":10,
"first_name":"Mihaela",
"last_name":"Radulescu",
"reservations":[
{
"id":112,
"salon_id":2,
"client_id":161,
"user_id":10,
"date":"2017-10-31", // the reservation date
"start":"10:00",
"end":"12:00",
"state_id":5,
"notes":null,
"price":"350.00",
"reservation_services":[
{
"reservation_id":112,
"service_id":89,
"quantity":1,
"price":"400.00",
"date_start":"2017-11-02", // this is wrong
"name":"Tratament ANTI AGE",
"total":"400.00"},
{
"reservation_id":112,
"service_id":89,
"quantity":1,
"price":"350.00",
"date_start":"2017-10-19", // this is ok
"name":"Tratament ANTI AGE",
"total":"350.00"}
],
"reservation_products":[

]
},
]
},
],

Я не знаю почему, но эта строка кода

$query->where('services_price_history.date_start', '<', 'reservations.date');

не работает, как это должно быть, потому что '2017-11-02' выше чем '2017-10-31' но это проявляется в результатах.

Большое спасибо.

1

Решение

Вместо:

$query->where('services_price_history.date_start', '<', 'reservations.date');

использовать:

$query->whereRaw('services_price_history.date_start < reservations.date');
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector