我有一个组模型,其中定义了多个关系。现在我希望通过各种参数浏览组。例如,一个群体可以拥有"兴趣"它被定义为模型中的关系。因此,如果我选择一个特定的兴趣,它应该显示所有相关的组。
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 = ageGroup
(ageGroup
是关系),$browseField = ethnicity
按种族浏览。现在,如果有人决定提供无效的$browseField = asfasf
,则代码会抛出错误。这是我想要阻止的
答案 0 :(得分: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();
}