DB :: таблица и модель Eloquent — база данных Laravel

При поиске Сеанса базы данных часто можно увидеть людей, использующих DB::table('my_table')->insert(['column' => 'value']) в классах сеялки. Я хотел бы знать причину этого очевидного соглашения о том, почему я должен использование DB::* вместо MyModel::* выполнять такие задачи.

3

Решение

Самое главное, потому что с DB вставки, вы можете сделать несколько вставок одновременно. Особенно при заполнении большого количества больших таблиц, это намного, намного быстрее, чем выполнение одного запроса на вставку.

http://laravel.com/docs/master/queries#inserts

DB::table('users')->insert([
['email' => 'taylor@example.com', 'votes' => 0],
['email' => 'dayle@example.com', 'votes' => 0]
]);

Вам также не нужно загружать класс Eloquent или какой-либо объем, который поставляется вместе с ним. Опять же, посекая тысячи строк, создавая тысячи объектов Eloquent …, которые могут занимать много памяти.

И, наконец, если есть ошибки или проблемы с моделями Eloquent, ваши семена все равно будут работать.


Есть некоторые недостатки. Например, если одна из ваших моделей Eloquent переопределяет установщик для манипулирования и форматирования данных перед их сохранением, то вы теряете это удобство.

И на самом деле это относится к любой модели с $ timestamps; с DB вставки вы должны будете установить created_at а также updated_at метки времени вручную. Но с сеялкой вы можете смоделировать, что предметы были созданы дни, месяцы или годы назад, и в этом случае вы бы не стали хочу эти отметки времени будут установлены автоматически.


Но на самом деле, многие люди используют модельные фабрики. Если вы действительно хотите использовать свои сеттеры или автоматически назначать отношения и в основном использовать все, что предлагает Eloquent, тогда они отлично подходят для заполнения. С компромиссами эффективности я упомянул, но иногда это того стоит.

5

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

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