php - 减少 Laravel 中更新查询的时间(无需 for 循环,对于相同的键和多个值)

标签 php arrays laravel for-loop laravel-5

for ($i = 0; $i < count($ids); $i++) {
    ls_player_details::where('Bib_no', $ids[$i])->update(['chestno' => $chestnos[$i]]);
}

此更新查询 162 条记录需要 8 秒,因此希望减少时间

所以我做了这个;

for ($i = 0; $i < count($chestnos); $i++) {
    $data[] = array('chestno' => $chestnos[$i]);
}

ls_player_details::whereIn('Bib_no', $ids)->update($data);

现在问题是什么;

现在我得到这样的数据

[ 
    {
        "chestno": 50
    },
    {
        "chestno": 51
    },
    {
        "chestno": 52
    },
    {
        "chestno": 53
    },
    {
        "chestno": 54
    },
    {
        "chestno": 55
    },
]

但我想得到类似的数组;

["chestno": 50,"chestno": 50,"chestno": 50]

问题:

使用 for 循环将同一键的多个值插入数组,

我想知道还有其他方法可以完成同样的事情。

最佳答案

正如我在评论中建议的,一种方法是使用 CASE WHEN 子句进行重构。

您应该能够使用 DB:raw select 语句与您的 update 方法调用。

$data = '(SELECT CASE Bib_no';
foreach ($ids as $i => $id) {
    if (!array_key_exists($i, $chestnos)) {
        /* uncomment to prevent NULL value when $id is not in $chestnos
        unset($ids[$i]);
        */
        continue;
    }
    $data .= ' WHEN "' . $id . '" THEN "' . $chestnos[$i] . '"';
}
$data .= ' END)';

ls_player_details::whereIn('Bib_no', $ids)
    ->update(['chestno' => DB::raw($data)]);

示例 https://3v4l.org/tglaB

执行的查询结果应如下所示:

UPDATE ls_player_details
SET chestno = (SELECT CASE Bib_no
WHEN "a" THEN "50"
WHEN "b" THEN "51"
WHEN "c" THEN "52"
WHEN "d" THEN "53"
WHEN "e" THEN "54"
WHEN "f" THEN "55"
WHEN "g" THEN "56"
END)
WHERE Bib_no IN("a", "b", "c", "d", "e", "f", "g")

这会将 chestno 列更新为相应的 Bib_no 引用(如果已选择)。如果 CASE WHEN 子句中没有 Bib_no 匹配项,则默认为 NULL

关于php - 减少 Laravel 中更新查询的时间(无需 for 循环,对于相同的键和多个值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53849833/

相关文章:

laravel - 将 laravel 变形集合转换为模型集合?

c - 在C中为数组的每个元素添加前缀

javascript - 检查元素是否在数组中

php - 是否有 Google Plus 评论插件? (比如 Facebook 社交评论、DISQUS 或 IntenseDebate)?

PHP:Bootstrap 单选按钮值未显示

java - 为什么在大型数组上使用 Arrays.sort(Object[] a) 时没有出现 StackOverflowError?

laravel - Facebook 营销 API 见解(目标网址)

MySQL/Laravel/Vue - 单个表单输入可以将多个值提交到多个列吗?

PHP 路由 - 包含 css/js 文件时出错

php - MySQL LIKE 语句和 PHP 变量