如何强制 laravel 对列名使用驼峰式命名法

How to force laravel to use camelCase for column names

Larvel 使用 snake_case 作为 table 列名称。如何以以下 getter 有效的方式覆盖此假设?

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

我需要首​​先用以下内容来警告这个答案:我没有测试过这段代码;其次我从来没有要求使用这个。

话虽如此,在 eloquent 型号上有静态 属性 可用:

/**
 * Indicates whether attributes are snake cased on arrays.
 *
 * @var bool
 */
public static $snakeAttributes = true;

通过将其切换为 false,您可以关闭模​​型上属性名称和关系名称的蛇形外壳。这应该有您想要的结果。

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

if (static::$snakeAttributes) {
    $match = Str::snake($match);
}

由于这是静态的 属性,您可以通过更改模型本身的静态值来全局更改所有模型的此项。否则,您可以通过覆盖您需要的每个模型中的静态来在每个模型的基础上进行此更改。要全局更改,您可以将类似的内容添加到 AppServiceProvider:

public function boot()
{
    \Illuminate\Database\Eloquent\Model::$snakeAttributes = false;
}