Я новичок в Laravel и Eloquent и пытаюсь получить уникальные записи из 3 таблиц, а именно шкафы, item_types и сводную cupboard_items. Существует также 4-я таблица местоположений.
Создал рабочий запрос в MySQL, как показано ниже (успешно протестирован на рабочем месте MySQL). Пробовал использовать DB::raw('') и DB::statement(''), но моя IDE выдала предупреждение, что «Ни один источник данных не настроен для запуска этого SQL и предоставления расширенной помощи по коду», и использование DB::raw вернуло пустой объект, в то время как DB::statement вернул «истину».
SELECT cupboards.cupboard_id, cupboards.name, cupboards.capacity, dist.item_type_id, item_types.name, locations.coordinates FROM cupboards INNER JOIN
(SELECT DISTINCT cupboard_items.item_type_id, cupboard_id FROM cupboard_items) AS dist
ON cupboards.cupboard_id = dist.cupboard_id
INNER JOIN item_types ON dist.item_type_id = item_types.item_type_id
INNER JOIN locations ON locations.location_id = cupboards.location_id;
Не уверен, что мой синтаксис неверен, но впоследствии я также попытался построить запрос Eloquent.
$result = DB::table('cupboards')
->select(DB::raw('cupboards.cupboard_id, cupboards.name, cupboards.capacity, dist.item_type_id, item_types.name, locations.coordinates'))
->join(DB::raw('SELECT DISTINCT cupboard_items.item_type_id, cupboard_id FROM cupboard_items'))
->join('item_types', 'dist.item_type_id', '=', 'cupboard.item_type_id')
->join('locations', 'locations.location_id', '=', 'cupboards.location_id')
->get();
Но, по-видимому, я не могу использовать DISTINCT в своем операторе запроса DB::raw, и я не уверен, правильно ли выполнено мое соединение. Любые советы о том, как действовать отсюда, очень ценятся!!! Спасибо!