Laravel允许插入多行作为要插入的数组行数组
https://laravel.com/docs/5.5/queries#inserts
DB::table('users')->insert([
['email' => 'taylor@example.com', 'votes' => 0],
['email' => 'dayle@example.com', 'votes' => 0]
]);
还有其他方法可以对更新进行相同的操作吗?
DB::table('users')->update[
[update to record 1],
[update to record 2]
];
答案 0 :(得分:0)
您可能需要使用newQuery方法
$rows = [
[id => '1', 'email' => 'foo@bar'],
[/*...*/]
];
$query = DB::table('users');
foreach(var $i=0; $i<count($rows); $i++) {
if($i > 0) {
$query->newQuery();
}
$query->where('id', $rows[$i]['id'])
->update(['email' => $rows[$i]['email'];
}
这可能有效(未经测试)
答案 1 :(得分:0)
您可以使用以下示例中的特定查询。
假设我们有一个这样的结构:
+----+----------+-------------+---------+
| id | username | club | country |
+----+----------+-------------+---------+
| 2 | Messi | Barca | Arg |
| 3 | Ronaldo | Juventus | Por |
| 4 | Salah | Liverpool | Egy |
+----+----------+-------------+---------+
,我们希望在一个查询中更新所有行和列。
我们可以使用以下说明:
$table = 'players';// table name
// values to update
$values = [['id' => '2','club' =>'Barca', 'country' => 'Argentina'],
['id' => '3','club' =>'Man Utd','country' => 'Portugal'],
['id' => '4','club' =>'Chelsea','country' => 'Egypte']];
$cases = [];
$ids = [];
$param1 = []; // for the first column
$param2 = []; // for the Seconde column
$params = []; // for merging all columns
foreach ($values as $value) {
$value=(object)$value;
$id = (int) $value->id;
$cases[] = "WHEN {$id} then ?";
$param1[] =$value->club;
$param2[] =$value->country;
$ids[] = $id;
}
$params=array_merge($param1,$param2);
$ids = implode(',', $ids);
$cases = implode(' ', $cases);
\DB::update("UPDATE `{$table}`
SET `club` = CASE `id` {$cases} END ,
`country` = CASE `id` {$cases} END
WHERE `id` in ({$ids})", $params);
希望这会有所帮助。