Я делал:
$data = [
['amodule'=>'amodule', 'akey'=>'first_example', 'avalue'=>'4096', 'created_at'=>'2014-09-21'],
['amodule'=>'amodule2', 'akey'=>'sec_example', 'avalue'=>'4097', 'created_at'=>'2014-09-22'],
['amodule'=>'amodule2', 'akey'=>'sec_example', 'avalue'=>'4097', 'created_at'=>'2014-09-22'],
];
Models\Snapshot::insert($data);
Просто выполняю массовую вставку. Теперь я хочу добавить ключ дубликата к этому. Есть идеи, как это сделать? Или в списке, чтобы игнорировать дубликаты?
Заранее спасибо…
Eloquent не поддерживает это в данный момент, вам придется написать его как необработанный запрос.
// generates (?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?)
$valueString = implode(',', array_fill(0, count($data), '(' . implode(',', array_fill(0, count($data[0]), '?')) . ')'));
$values = [];
// Flattens the array
foreach($data as $row) {
foreach($row as $value) {
$values[] = $value;
}
}
// Perform the insert
\DB::insert(
"insert into `snapshots` (`amodule`, `akey`, `avalue`, `created_at`) values {$values} on duplicate key update",
$values
);
Имейте в виду, что для on duplicate key update
для запуска по крайней мере одно из вставленных значений должно иметь первичный ключ или уникальный ключ.
Других решений пока нет …