Вот код, я использую в статическом functon моей \ App \ Model к добавьте несколько значений с игнорированием вставки. Этот код является компиляцией различных ответов, которые я встречал в StackOverflow.
Протестировано и работает на Laravel 5.6 с PHP 7.1.3
$keys = ['column1', 'column2', 'column3'];
foreach ($whatever as $result) {
$banban = [];
$banban[] = $result->value1;
$banban[] = $result->value2;
$banban[] = $result->value3;
$values[] = $banban;
}
return DB::insert(
'INSERT IGNORE INTO ' . with(new self)->getTable() .
'(' . implode(',', $keys) . ') values ' .
substr(str_repeat('(?' . str_repeat(',?', count($keys) - 1) . '),', count($values)), 0, -1),
array_merge(...$values)
);
Некоторые пояснения:
with(new self)
возвращает новый экземпляр модели. Это простой способ получить имя таблицы модели в статической функции.
substr(...,0,-1)
используется для удаления последней запятой из «значений»
str_repeat
используется дважды, чтобы создать «(?,?,?)» Заполнители и «?» внутри.
array_merge(...$values)
flatters массив значений. Вот почему $values
не может иметь пользовательские ключи.
Надеюсь, это поможет.