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” 将变量大小写更改为蛇形大小写的主要内容,如果未能解决你的问题,请参考以下文章
如何将此 try-finally 更改为 try-with-resources?
OpenCL 多 GPU 积分 - 将全局大小从 32 更改为 64 时的段错误