【问题标题】:Laravel "with" changes variable case to snake caseLaravel “with” 将变量大小写更改为蛇形大小写
【发布时间】: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);

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

【问题讨论】:

    标签: php laravel relationship


    【解决方案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() 方法中。
    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2018-10-17
    • 2016-08-07
    • 2019-06-12
    相关资源
    最近更新 更多