2017-06-28 61 views
3

在我Laravel应用程序,我有一个定义像关系的模型:当我查询象下面这样记录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”的关系:

enter image description here

我该如何让laravel停止更改我的变量与蛇案的关系?

只是为了笑着

,我也试过:

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

它未能看到相关机型:

enter image description here

所以后来我想:

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

这也未能看到相关型号:

enter image description here

回答

4

Laravel当模型被转换成一个阵列(toArray())或JSON(toJson())从camelCasesnake_case关系的名称自动转换。

因此,模型上的属性实际上是vitalCategories,但是当您将其转储为json时,它将打印为vital_categories

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

public static $snakeAttributes = false; 
+0

看来它实际上是'静态$ snakeAttributes = false;'(静态vs保护),但你钉了它,谢谢你! – DelightedD0D

+1

@ DelightedD0D是的,它也是'公开'的。对不起,我比从实际的代码看内存更多。傻我。我已经更新了答案。谢谢! – patricus