Конкатенация
(вот как это сделать по-своему)
К нему в коллекциях.Здесь я хочу загрузить пользователя, но вам не нужно этого делать.Это резко улучшит производительность, хотя.Обратите внимание, что это 3 разных запроса, каждый из которых выполняет соединение из-за вашего дизайна).
$table1 = Table1::with('user')->all();
$table2 = Table2::with('user')->all();
$table3 = Table3::with('user')->all();
$tables = $table1->merge($table2)->merge($table3);
$tables = $tables->sortBy('create_at');
База данных и ООП Дизайн
(вот как вы должны это сделать)
Почему вы хотите, чтобы они были в отдельных таблицах?Обычно считается, что плохой дизайн не нормализуется.Если два объекта имеют одинаковые поля / члены, они имеют одинаковый KIND объекта.
Если объекты имеют одинаковые поля, они должны иметь одинаковый KIND объекта, и вы должны добавить флаг для типа этогообъект, чтобы получить.Таким образом, вместо трех таблиц с
- id
- user_id
- описание
- updated_at
- создал_at
У вас будет одна таблица с полями:
- id
- user_id
- описание
- тип
- updated_at
- create_at
Обязательно поставьте index
на type
, так что не влияет на производительность , чтобы вставить их всех в одно и то жеТаблица.Затем, чтобы отсортировать их все по create_at (обратите внимание на один запрос, одно объединение):
$tables = Table::->orderBy('created_at')->with('user')->get();
Чтобы разбить один:
$table1 = Table::where('type','=',1)->with('user')->get();
$table2 = Table::where('type','=',2)->with('user')->get();
$table3 = Table::where('type','=',3)->with('user')->get();
Чтобы получить их все, разбейте:
$tables = Table::->orderBy('created_at')->with('user')->get()->groupBy('type');
Если у одного (или более) из «типов» объектов есть новые поля, то вы начинаете путь по наследству .