Объедините 5 таблиц в Laravel и отсортируйте по created_at

Я делаю веб-сайт для рекламы, и люди могут публиковать то, что они продают. Итак, у меня есть таблицы: cars, technology, real_estate, pets и т. д. Все эти таблицы имеют разные столбцы, кроме столбца «created_at», который является общим для всех таблиц.

Пример:

АВТОМОБИЛИ: [Модель, Тип, тип топлива..., created_at]

PETS: [Имя, Описание..., created_at]

Итак, если cars имеет 5 строк, pets имеет 7, а real_estate имеет 3, мне нужно вернуть 15 строк, отсортированных по created_at. Мне нужно объединить все 5 (или более) таблиц и отсортировать их по created_at (без потери строк). У вас есть советы или идеи, как это сделать в laravel (Eloquent)?


person Lazar B.    schedule 18.01.2016    source источник
comment
Я думаю, что это больше проблема схемы БД. Advertisement -- отношение полиморфа -- models   -  person Sven van Zoelen    schedule 18.01.2016
comment
Можете ли вы помочь мне как-то   -  person Lazar B.    schedule 18.01.2016


Ответы (1)


Я не верю, что вы можете сделать что-то полезное с запросом. Объединения требуют, чтобы все запросы возвращали одинаковое количество столбцов, вы, вероятно, не хотите присоединяться к этим таблицам, потому что это приведет к путанице. Я считаю, что лучшим решением было бы использовать Collections.

$collection = new \Illuminate\Support\Collection();
$sortedCollection = $collection->merge($pets)->merge($cars)->merge($realEsate)->sortBy('created_at');
person user1669496    schedule 18.01.2016
comment
переменные в методе слияния означают, например: $pets = Pet::all() ... Или это означает домашние животные имени таблицы? - person Lazar B.; 18.01.2016
comment
Я сделал это с помощью Pet::all(), и это работает. Большое спасибо! - person Lazar B.; 18.01.2016