如何强制laravel使用camelCase作为列名

PHP*_*Pst 5 php naming laravel laravel-5

Larvel使用snake_case作为表列名.如何以下面的getter工作方式覆盖这个假设?

public function getFooBarAttribute()
{
    return json_decode($this->attributes['fooBar'], true);
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ker 8

我需要先用以下内容告诫这个答案:我没有测试过这段代码; 其次,我从来没有要求使用它.

话虽如此,在雄辩的模型上有一个静态属性:

/**
 * Indicates whether attributes are snake cased on arrays.
 *
 * @var bool
 */
public static $snakeAttributes = true;
Run Code Online (Sandbox Code Playgroud)

通过将其切换为false,可以关闭模​​型上属性名称和关系名称的蛇形外壳.这应该具有您正在寻找的预期结果.

如果您感兴趣,模型的源代码有一个方法cacheMutatedAttributes,在属性中运行正则表达式以检查是否存在任何突变,如果它们匹配则通过以下代码段运行.

if (static::$snakeAttributes) {
    $match = Str::snake($match);
}
Run Code Online (Sandbox Code Playgroud)

由于这是一个静态属性,您可以通过更改模型本身的静态值来全局更改所有模型.否则,您可以通过覆盖所需的每个模型中的静态来基于每个模型进行此更改.要全局更改,您可以添加以下内容AppServiceProvider:

public function boot()
{
    \Illuminate\Database\Eloquent\Model::$snakeAttributes = false;
}
Run Code Online (Sandbox Code Playgroud)

  • @David:我想要模型在骆驼情况下返回的所有数据字段。我如何实现它? (2认同)