You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化Laravel中多次调用Setting模型更新配置的重复代码?

Laravel 配置更新代码优化方案

你当前的写法重复调用了查询构造器,每更新一条配置就会发起一次数据库请求,冗余度高且性能差,可通过以下两种方式优化:

方案1:白名单遍历更新(改动最小,适合少量配置)

提前定义允许更新的配置键白名单,通过遍历完成更新,后续新增配置只需修改白名单数组即可,无需重复写查询逻辑:

// 配置白名单,禁止直接传入请求所有字段,避免非法篡改其他配置
$allowKeys = ['online_course', 'read_item', 'comment_item', 'rate_item'];

foreach ($allowKeys as $key) {
    // 仅更新请求中存在的字段
    if ($request->has($key)) {
        Setting::where('key', $key)->update(['value' => $request->input($key)]);
    }
}

方案2:批量Upsert更新(性能最优,适合多配置场景)

如果你的settings表已经给key字段加上了唯一索引,可以直接用Laravel原生的upsert方法,仅发起一次数据库请求完成所有更新,性能远高于多次查询:

$allowKeys = ['online_course', 'read_item', 'comment_item', 'rate_item'];

// 构造待更新数据集
$updateData = collect($allowKeys)
    ->filter(fn($key) => $request->has($key))
    ->map(fn($key) => [
        'key' => $key,
        'value' => $request->input($key)
    ])
    ->toArray();

// 第一个参数是待更新数据,第二个是唯一识别字段,第三个是需要更新的字段
Setting::upsert($updateData, ['key'], ['value']);

额外优化建议

  • 可以把批量更新的逻辑封装到Setting模型的自定义方法中,比如新增public static function batchUpdate(array $data)方法,后续业务调用只需传入符合要求的数组即可,维护统一更简洁。
  • 如果有表单校验需求,可搭配验证器先对请求参数做合法性校验,再执行更新逻辑。

内容的提问来源于stack exchange,提问作者zanko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 12:24:04