Home » Php » php – Laravel "with" changes variable case to snake case

php – Laravel "with" changes variable case to snake case

Posted by: admin July 12, 2020 Leave a comment

Questions:

In my Laravel app, I have A model that defines a relationship like:

public function vitalCategories()
{
    return $this->belongsToMany(
        'App\Models\Diagonals\VitalLabelCategory',
        'vitalLabelCategoryMap',
        'vitalLabelId',
        'vitalLabelCategoryId');
}

When I query a record like below, I expect the relation to be available with the variable name vitalCategories

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

However, the above query produces the relation with the variable name ‘vital_categories’ like this:

enter image description here

How can I make laravel stop changing the case of my variable for the relation to snake case?

Just for grins, I also tried:

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

which failed to see the related models:

enter image description here

so then I tried:

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

which also failed to see the related models:

enter image description here

How to&Answers:

Laravel automatically converts the names of relationships from camelCase to snake_case when the model is converted to an array (toArray()) or json (toJson()).

So, the attribute on the model is actually vitalCategories, but when you dump it out as json, it will print as vital_categories.

If you would like to turn this off, you can set the $snakeAttributes property on your model to false.

public static $snakeAttributes = false;