Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel "with" changes variable case to snake case

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

like image 702
Wesley Smith Avatar asked Jun 28 '17 04:06

Wesley Smith


1 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;
like image 183
patricus Avatar answered Oct 10 '22 11:10

patricus