Я пытаюсь получить некоторые данные из таблицы, но мне нужен только один элемент.
Таблицы:
оговорки, оговорки_продукции, продукты_цены_истории.
Структура таблицы слишком сложна, поэтому давайте использовать только то, что нам нужно:
Бронирование:
| id | date |
-------------------
| 1 | 2017-10-03 |
reservation_products
| id | reservation_id |
-----------------------
| 1 | 1 |
products_price_history
| id | product_id | start_date | end_date | price |
-----------------------------------------------------
| 1 | 1 | 2017-09-20 | 2017-10-01 | 200 |
| 2 | 1 | 2017-10-01 | NULL | 200 |
Бронирование имеет много продуктов, а продукт имеет много цен. Мне нужно принять цену, что это start_date меньше даты бронирования.
Логика:
$users = User::with(['reservations' => function($query) {
// reservation products
$query->with(['reservation_products' => function($query) {
$query->join('reservations', 'reservation_products.reservation_id', 'reservations.id');
$query->join('products', 'reservation_products.product_id', 'products.id');
$query->join('products_price_history', function($query) {
$query->on('reservations.salon_id', 'products_price_history.salon_id');
$query->on('reservation_products.product_id', 'products_price_history.product_id');
$query->on('reservation_products.product_type_id', 'products_price_history.product_type_id');
$query->whereRaw('reservations.date >= products_price_history.date_start');
$query->limit(1);
});
}]);
}])->get();
$query->limit(1);
не работает. Запрос только дает мне все записи, которые ниже, чем дата бронирования.
Благодарю.
Задача ещё не решена.
Других решений пока нет …