使用复选框过滤Laravel集合

时间:2018-09-24 01:18:55

标签: laravel

您好,我通过表单提交使用url参数在Laravel(5.7)中过滤了一组数据。

资源可以具有许多课程级别和许多主题,这是我用来根据所选复选框进行过滤的代码:

if($request->get('subjects') || $request->get('levels')) {
        $subjects = $request->get('subjects');
        $levels = $request->get('levels');
        $resources = Resource::whereHas('subjects', function($query) use ($subjects) {
                    return $query->whereIn('id', (array)$subjects);
                })
                ->orWhereHas('curriculumLevels', function($query) use ($levels) {
                    return $query->whereIn('id', (array)$levels);
                })
                ->get();
    }else {
        $resources = Resource::all();
    }

我的问题:

A)这是根据用户选择过滤数据的最佳方法吗?

B)表单生成的网址很丑陋,我该如何清理它,使它看起来像subject = 1,2,3&levels = 1,2,3?

/resources?subjects%5B%5D=6&subjects%5B%5D=7&levels%5B%5D=2&levels%5B%5D=4

C)提交表单后,不再选中复选框,如何使用url参数显示选中的复选框?

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

A)使用范围,它更有可能是最佳选择

class CreateMyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['name']
        widgets={'name':MyWidget(addon="Name",placeholder="MyModel Name")}

B)RFC 3986标准不在乎URL是否看起来不错,如果最终用户不应该对其进行修改,则也不应该这样做(这永远不会发生)。获取参数对SEO不友好

C)您必须进一步传递它,在POST请求之后您要做

attrs

withInput应该可以通过TextInput方法进行访问