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

Laravel控制器如何将驼峰格式请求输入转换为蛇形匹配模型属性

解决方案

核心转换方法

Laravel 内置的 Illuminate\Support\Str 类已经提供了驼峰转蛇形的原生方法 snake,就是你要找的Str::camel的反向实现:

use Illuminate\Support\Str;

// 输出结果为 lifetime_sales
echo Str::snake('lifetimeSales');

批量转换请求参数实现快速赋值

你可以通过集合的mapWithKeys方法批量转换所有请求参数的键名,之后直接用模型的批量赋值功能完成属性填充,无需手动逐个赋值:

use Illuminate\Support\Str;

// 转换所有请求参数键为蛇形
$convertedInput = collect($request->all())
    ->mapWithKeys(function ($value, $key) {
        return [Str::snake($key) => $value];
    })
    ->toArray();

// 批量赋值,需确保模型已配置$fillable允许对应字段批量赋值
$scopeCommercial = new ScopeCommercial($convertedInput);
$scopeCommercial->save();

注意:需要提前在模型中设置$fillable属性列出允许批量赋值的字段,或者设置protected $guarded = [];放开所有字段的批量赋值限制。

全局自动转换方案(推荐)

如果多个控制器都需要这个能力,可以封装为全局中间件,所有请求进入后自动将驼峰参数转为蛇形,控制器无需额外处理:

  1. 生成中间件
php artisan make:middleware ConvertCamelToSnake
  1. 编写中间件逻辑
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

class ConvertCamelToSnake
{
    public function handle(Request $request, Closure $next)
    {
        $convertedInput = collect($request->all())
            ->mapWithKeys(function ($value, $key) {
                return [Str::snake($key) => $value];
            })
            ->toArray();

        $request->merge($convertedInput);
        return $next($request);
    }
}
  1. 注册中间件到app/Http/Kernel.php的对应中间件组,比如全局中间件组$middleware或者指定的路由组,之后所有请求参数会自动转换格式。

嵌套参数处理

如果存在多层嵌套的请求参数,可以用递归函数处理键名转换:

function camelToSnakeKeys(array $input): array
{
    $result = [];
    foreach ($input as $key => $value) {
        $snakeKey = Str::snake($key);
        $result[$snakeKey] = is_array($value) ? camelToSnakeKeys($value) : $value;
    }
    return $result;
}

// 调用方式
$convertedInput = camelToSnakeKeys($request->all());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:57:00