Laravel “with” 将变量大小写更改为蛇形大小写

Posted

技术标签:

【中文标题】Laravel “with” 将变量大小写更改为蛇形大小写【英文标题】:Laravel "with" changes variable case to snake case 【发布时间】:2017-12-01 07:20:49 【问题描述】:

在我的 Laravel 应用程序中,我有一个定义如下关系的模型:

public function vitalCategories()

    return $this->belongsToMany(
        'App\Models\Diagonals\VitalLabelCategory',
        'vitalLabelCategoryMap',
        'vitalLabelId',
        'vitalLabelCategoryId');

当我查询如下记录时,我希望该关系可以使用变量名vitalCategories

$vitalLabel = VitalLabel::where('label', 'confirmation')->with(['subscribers','vitalCategories','vitals'])->first();
return json_encode($vitalLabel);

但是,上面的查询会产生与变量名称“vital_categories”的关系,如下所示:

如何让 laravel 停止更改我的变量的大小写以与蛇案例的关系?

只是为了笑,我也试过了:

$vitalLabel = VitalLabel::where('label', 'confirmation')->with(['subscribers','vitalCategories','vitals'])->first();
$vitalLabel->load('vitalCategories');
$vitalLabel->vitalCategories = $vitalLabel->vitalCategories() ;
return json_encode($vitalLabel);

没有看到相关型号:

然后我尝试了:

$vitalLabel = VitalLabel::where('label', 'confirmation')->with(['subscribers','vitalCategories','vitals'])->first();
$vitalLabel->load('vitalCategories');
$vitalLabel->vitalCategories = $vitalLabel->vital_categories;
return json_encode($vitalLabel);

其中也没有看到相关型号:

【问题讨论】:

【参考方案1】:

当模型转换为数组 (toArray()) 或 json (toJson()) 时,Laravel 会自动将关系名称从 camelCase 转换为 snake_case

所以,模型上的属性实际上是vitalCategories,但是当你将它作为json转储出来时,它会打印为vital_categories

如果您想关闭此功能,可以将模型上的 $snakeAttributes 属性设置为 false。

public static $snakeAttributes = false;

【讨论】:

看起来它实际上是 static $snakeAttributes = false;(静态与受保护),但您成功了,谢谢! @DelightedD0D 是的,它也是public。对不起,我更多的是从记忆中而不是查看实际代码。傻我。我已经更新了答案。谢谢! 完美答案 此外,由于该属性是公共的,因此您可以在获取数组之前或任何其他地方设置它。关键是很容易忘记在load() 方法中不需要这个,而是在toArray() 方法中。

以上是关于Laravel “with” 将变量大小写更改为蛇形大小写的主要内容,如果未能解决你的问题,请参考以下文章

如何将 html id 更改为变量 Laravel

如何将此 try-finally 更改为 try-with-resources?

OpenCL 多 GPU 积分 - 将全局大小从 32 更改为 64 时的段错误

将连接查询更改为 laravel

Laravel 5.2 auth 将 'id' 更改为 'customer_id'

Setup Objective UI with UMG