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

Laravel中如何将Eloquent模型蛇形属性序列化为驼峰式?

解决方案:Laravel Eloquent 蛇形属性转驼峰式JSON输出

不需要额外引入第三方库,Laravel本身就有几种优雅的实现方式,推荐按以下优先级选择:

1. 使用API资源类(推荐)

API资源是Laravel官方推荐的API输出格式化方案,灵活性高,便于维护:

步骤1:生成User资源类

php artisan make:resource UserResource

步骤2:修改资源类的toArray方法

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Str;

class UserResource extends JsonResource
{
    /**
     * 将资源转换为数组。
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
     */
    public function toArray($request)
    {
        $rawAttributes = $this->resource->toArray();
        $camelCaseAttributes = [];

        foreach ($rawAttributes as $snakeKey => $value) {
            $camelCaseAttributes[Str::camel($snakeKey)] = $value;
        }

        return $camelCaseAttributes;
    }
}

步骤3:在控制器中使用资源类

use App\Http\Resources\UserResource;
use App\Models\User;

// ...

$users = User::all();
return UserResource::collection($users);

2. 重写模型的toArray方法

如果只需要针对单个模型处理,可以直接在User模型中重写toArray方法:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class User extends Model
{
    // ... 其他模型代码

    /**
     * 将模型转换为数组。
     *
     * @return array
     */
    public function toArray()
    {
        $rawAttributes = parent::toArray();
        $camelCaseAttributes = [];

        foreach ($rawAttributes as $snakeKey => $value) {
            $camelCaseAttributes[Str::camel($snakeKey)] = $value;
        }

        return $camelCaseAttributes;
    }
}

之后直接用原来的代码即可输出驼峰式JSON:

$user = User::all();
return response()->json($user);

3. 全局统一处理(基类模型)

如果需要所有模型都输出驼峰式属性,可以创建一个基类模型,让所有业务模型继承它:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class BaseModel extends Model
{
    public function toArray()
    {
        $rawAttributes = parent::toArray();
        $camelCaseAttributes = [];

        foreach ($rawAttributes as $snakeKey => $value) {
            $camelCaseAttributes[Str::camel($snakeKey)] = $value;
        }

        return $camelCaseAttributes;
    }
}

然后User模型继承BaseModel:

class User extends BaseModel
{
    // ... 模型代码
}

补充说明

  • Str::camel()是Laravel内置的辅助函数,专门用于将蛇形命名转换为驼峰式命名,无需自己实现字符串转换逻辑。
  • 如果仅需要处理created_at、updated_at这类时间字段,可以单独重写模型的serializeDate方法,但上述方案适用于所有属性的转换需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:39:17