Как мы можем выполнять массовые вставки базы данных в Laravel, используя Eloquent ORM?
Я хочу сделать это в Laravel: https://stackoverflow.com/a/10615821/600516, но я получаю следующую ошибку.
SQLSTATE [HY093]: недопустимый номер параметра: смешанные именованные и позиционные параметры.
has_many
отношения на ваших моделях?Ответы:
Вы можете просто использовать
Eloquent::insert()
.Например:
источник
Eloquent
на самом деле. Это просто прокси-вызовQuery\Builder@insert()
метода. Eloquent не может эффективно вставить несколько строк, а также не предлагает какой-либо метод для массовой вставки.Мы можем обновить ответ GTF, чтобы легко обновлять временные метки.
Обновление: чтобы упростить дату, мы можем использовать углерод, как предложил @Pedro Moreira.
ОБНОВЛЕНИЕ 2: для laravel 5, используйте
updated_at
вместоmodified_at
источник
$now
переменную:$now = Carbon::now('utc')->toDateTimeString();
. Тогда просто используйте'created_at' => $now, 'updated_at' => $now
для каждой вставки.Carbon
в этой ситуации? Что не так сdate("Y-m-d H:i:s")
?Для тех, кто читает это, проверьте
createMany()
метод .источник
Model::createMany()
.Вот как вы делаете это более красноречивым образом,
источник
Я искал много раз, наконец, использовал обычай,
timestamps
как показано ниже:источник
Eloquent::insert
является правильным решением, но оно не будет обновлять временные метки, так что вы можете сделать что-то вроде нижеИдея состоит в том, чтобы добавить create_at и updated_at во весь массив перед выполнением вставки
источник
С Laravel 5.7
Illuminate\Database\Query\Builder
вы можете использовать метод insertUsing.источник
UserSubscription
это название моей модели Это вернет «true», если вставить успешно, иначе «false».источник
Возможно, более простой способ решить эту проблему - использовать коллекцию и вставить ее в цикл, используя модель, использующую метки времени.
РЕДАКТИРОВАТЬ:
Извините за мое недоразумение. Для массовой вставки это может помочь, и, возможно, с этим вы можете сделать хорошие сеялки и немного их оптимизировать.
источник
Для вставки отношений категории я столкнулся с той же проблемой и понятия не имел, за исключением того, что в своей красноречивой модели я использовал Self (), чтобы иметь экземпляр того же класса в foreach для записи нескольких сохранений и идентификаторов захвата.
без "$ obj = new Self ()" он сохраняет только одну запись (когда $ obj был $ this)
источник
Проблема решена ... Изменить таблицу для миграции
Решение:
источник