2014-09-24 19 views
5

robiłem:Eloquent wkładka masa, ON duplikat 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); 

Wystarczy przeprowadzania masowej wkładkę. Teraz chcę dodać do tego klucz DUPLICATE. Masz pomysł, jak to zrobić? Lub na liście, aby zignorować duplikaty?

góry dzięki ...

Odpowiedz

1

Eloquent nie obsługuje tego w tej chwili, trzeba by napisać go jako surowego zapytania.

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

Należy pamiętać, że aby on duplicate key update na spust, co najmniej jeden z wprowadzonych wartości musi mieć klucz podstawowy lub unikalny klucz.

Powiązane problemy