如何在laravel

时间:2016-12-12 10:34:32

标签: php laravel relationship

我有一个模型,其中定义了多个关系。现在我希望通过各种参数浏览组。例如,一个群体可以拥有"兴趣"它被定义为模型中的关系。因此,如果我选择一个特定的兴趣,它应该显示所有相关的组。

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,则代码会抛出错误。这是我想要阻止的

1 个答案:

答案 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();
}