2016-12-12 137 views
1

我有一个模型,其中定义了几个关系。现在我想通过各种参数浏览组。例如,一个组可以有一个“兴趣”,它被定义为模型中的关系。所以如果我选择一个特定的兴趣,它应该显示所有相关的组。如何检查laravel中的模型之间的有效关系

public function browse(Request $request) 
    { 
     // $browseField is the field we are browsing against, $fieldId is the primary key for that relationship 
     // I want $browseField to be a valid relationship 
     $browseField = $request->browseField; 
     $fieldId = $request->fieldId; 

     $groups = \App\Group::whereHas($browseField, function($q) use($fieldId) { 
      $q->where('id', $fieldId); 
     })->get(); 

     $data = ['groups' => $groups]; 
     return $this->sendResponseData($data); 
    } 

现在我不想为每个关系定义相同的过程,并将关系名称作为参数。

现在这项工作如果正确$browseField是有效的关系。但是,如何检查关系是否真的存在。我应该按照这种方式进行筛选,还是有更好的方法?

编辑

为了更好地解释什么,我想做的事, 组有“年龄组”,“种族”等,如果我想按年龄分组进行浏览,我将提供$browseField = ageGroupageGroup是关系),$browseField = ethnicity供种族浏览。现在,如果有人决定提供无效的$browseField = asfasf,代码会抛出错误。这是我想什么来防止

+0

从它听起来,你会过得更好使用'利息:: belongsToMany(“集团”);'你的兴趣模型 – scottevans93

+0

如果你正确地做了MVC,你永远不需要检查模型类之间的连接,你明确地提供了这个。 –

回答

2

您可以使用method_exists()

$group = new \App\Group(); 

if (method_exists($group, $browseField)) { 
    $groups = $group->whereHas($browseField, function($q) use($fieldId) { 
     $q->where('id', $fieldId); 
    })->get(); 
}