2014-05-06 41 views
0

如何轉變這種對重複密鑰更新查詢在Laravel4

DB::table('partners')->insert(array($data)); 

laravel查詢有ON DUPLICATE KEY UPDATE

結構樣子

$data['program_name'] = $program['program']['_']; 
$data['program_id'] = $program_id; 
$data['status'] = $program['status']; 
$data['shop_name'] = $shop->name; 
$data['shop_logo'] = $shop->image; 
$data['shop_description'] = $shop->description; 

其中program_id是唯一

+0

這似乎是你想要的,已經在其他地方解決的http://計算器.com/a/21009418/1231563 – stuyam

+0

以及RAW查詢如何? – fefe

回答

2

使用這樣的東西(隨時糾正,因爲這是未經測試):

DB::statement('INSERT INTO partners VALUES (' . implode(',', 
    array_map(function($val) { return ":$val"; } , array_keys($data)) 
) . ') ON DUPLICATE KEY UPDATE ' . implode(',', 
    array_map(function($val) { return "$val = VALUES($val)"; } , array_keys($data)) 
), $data); 
0

我創建了一個包,將包INSERT對重複密鑰更新

https://packagist.org/packages/yadakhov/insert-on-duplicate-key

$users = [ 
    ['id' => 1, 'email' => '[email protected]', 'name' => 'User One'], 
    ['id' => 2, 'email' => '[email protected]', 'name' => 'User Two'], 
    ['id' => 3, 'email' => '[email protected]', 'name' => 'User Three'], 
]; 

User::insertOnDuplicateKey($users); 

// produces: 

INSERT INTO `test_user_table`(`id`,`email`,`name`) VALUES 
(1,'[email protected]','User One'), (2,'[email protected]','User Two'), (3,'user3email.com','User Three') 
ON DUPLICATE KEY UPDATE `id` = VALUES(`id`), `email` = VALUES(`email`), `name` = VALUES(`name`)