gpt4 book ai didi

php - 在 laravel 中更新一组行的最佳方法是什么

转载 作者:行者123 更新时间:2023-11-30 22:05:10 25 4
gpt4 key购买 nike

以为我的 table 是这样的

+--------+-------------------+-----------+
| ID | Type | nOrder |
+--------+-------------------+-----------+
| 1 | A | 0 |
| 2 | A | 1 |
| 3 | A | 2 |
| 4 | B | 0 |
| 5 | B | 1 |
| 6 | B | 2 |
| 7 | B | 3 |
| 8 | B | 4 |
| 9 | C | 0 |
| 10 | C | 1 |
+--------+-------------------+-----------+

我有一个这样的数组

+--------+-------------------+-----------+
| ID | Type | nOrder |
+--------+-------------------+-----------+
| 5 | A | 0 |
| 4 | A | 1 |
+--------+-------------------+-----------+

我想在 laravel 中用这些新行更新我的表,在没有循环的 laravel 中有什么办法吗?如果不是,我如何使用 sql 语句来完成。

在 php 和 mysqli 中,我可以创建一个包含我所有更新查询的查询,然后在一个查询中发送它们,一个包含 10 个更新语句的查询,现在我怎么能在 laravel 中做到这一点???

最佳答案

如果您想在 mySQL 中使用单个查询来执行此操作,您有 2 个选择。

选项 1:使用 replace into mysql 构造如下:

$query = "replace into {$table} values (?, ?, ?), (?, ?, ?)";
$insertArray = [[5, "A", 0], [4, "A", 1]];
DB::insert($query, array_flatten($insertArray));

选项 2:使用 insert into on duplicate key mysql 构造如下:

$query = "insert into {$table} values (?, ?, ?), (?, ?, ?) on duplicate key update ID = VALUES(ID), Type = VALUES(Type), nOrder = VALUES(nOrder)";
$insertArray = [[5, "A", 0], [4, "A", 1]];
DB::insert($query, array_flatten($insertArray));

The difference between the 2 constructs is that replace into either inserts (for a new row) or deletes then inserts (for an existing row). However, insert into on duplicate key performs an insert for a new row and update for an existing row

您可以使用 this package两种选择

如果您需要执行速度但又不想使用这样的原始查询,另一种方法是使用 database transactions

关于php - 在 laravel 中更新一组行的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42052339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com