gpt4 book ai didi

php - Laravel 5 用不同的值更新多行

转载 作者:可可西里 更新时间:2023-11-01 06:52:06 25 4
gpt4 key购买 nike

我一直在到处寻找解决这个问题的方法,我希望有人已经解决了它或者有一些好的改进想法。

我正在使用 Laravel 5,我遇到过需要用新值更新许多行的情况。现在我正在为所有这些行做一个 for 循环来更新它们,我想对此进行优化,这样我就不会运行很多 sql 查询。这是一个示例代码:

<?php

//Well, the original code looks better than this, but the concept is the same

$myrows = [0,1,2,3,4,5,6,7,8,9];
$myvalues = [45,543,657,574,234,26457,2462,897,234,89032];

for($i=0;$i<count($myrows);$i++) {
MyClass::where('id', $myrows[$i])->update(['myColumn' => $myvalues[$i]]);
}

?>

显然,这将执行 10 个查询(与我要更新的行数相同),但出于优化目的,我只想用一个查询来执行此操作。我知道使用 whereIn(...)->update(...) 同时更新多行的能力但是使用这种方法你只能将所有行更新为相同的值,而不是像我的那样不同的值示例。

在此先感谢您的帮助!

最佳答案

$myRows = [0,1,2,3,4,5,6,7,8,9];
$myValues = [45,543,657,574,234,26457,2462,897,234,89032];

if (empty($myRows)) {
// return or throw exception
return;
}
if (count($myRows) != count($myValues) {
// in case of dynamic values for $myRows/$myValues
return;
}
$cases = [];
$cases[] = "CASE id";

for ($myRows as $row) {
$cases[] = "WHEN {$row} THEN ?";
}

$cases = implode(" ", $cases);
$ids = implode(",", $myRows);

DB::update("UPDATE `my_table` SET `my_column` = {$cases} END WHERE `id` in ({$ids})", $myValues);

关于php - Laravel 5 用不同的值更新多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38369830/

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