2014-09-24 20 views
5

che stavo facendo:inserto di massa Eloquente, ON DUPLICATE KEY UPDATE

$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); 

Proprio l'esecuzione di un inserto di massa. Ora voglio aggiungere un ON DUPLICATE KEY a questo. Qualche idea su come farlo? O alla lista per ignorare i duplicati?

Grazie in anticipo ...

risposta

1

Eloquente non supporta questo al momento, dovreste scriverlo come una query crudo.

// 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 
); 

Tenete a mente che, per on duplicate key update di innescare, almeno uno dei valori inseriti devono avere una chiave primaria o una chiave unica.

Problemi correlati