2014-09-24 57 views
5

我做:雄辯質量插入,對重複密鑰更新

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

只是執行質量插入。現在我想爲此添加一個ON DUPLICATE KEY。任何想法如何做到這一點?或在列表中忽略重複?

在此先感謝...

回答

1

雄辯不會在此刻支持這一點,你必須把它寫爲原始查詢。

// 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觸發,插入的值中的至少一個必須有一個主密鑰或唯一鍵。