Laravel: 让用户select MODEL 然后get query
Laravel: Let user select MODEL and then get query
我正在做一个 Laravel 项目,它应该是模块化的。
我写了一个搜索查询,我想要的是:
型号:
评估 A
评估 B
评估 C
查看:
{{ Form::open(array('route' => 'search')) }}
<select multiple name="search_by_form[]">
<option selected>Any</option>
<option value="assessment_a">A</option>
<option value="assessment_b">B</option>
<option value="assessment_c">C</option>
</select>
{{ Form::close() }}
控制器:
控制器要复杂得多,但我让您更容易理解我的需求。
现在是这样的:
$user_entry =$request->input('search_by_form', []);
$resultArray = [];
foreach ($user_entry as $entry){
if ($entry == "assessment_a"){
$model_results = AssessmentA::where("approved",1)->get();
} elseif ($entry == "assessment_b"){
$model_results = AssessmentB::where("approved",1)->get();
} elseif($entry == "assessment_c"){
$model_results = AssessmentC::where("approved",1)->get();
}
}
我想要的:
搜索视图控制器:
foreach 通过特定文件夹中的模型
然后:
{{ Form::open(array('route' => 'search')) }}
<select multiple name="search_by_form[]">
<option selected>Any</option>
@foreach($models as $model)
<option value="{{ $model }}">{{ $model->name }}</option>
@endforeach
</select>
{{ Form::close() }}
与其采用这种丑陋的方法,不如采用更多类似的方法:
foreach ($user_entry as $entry){
$entry::where("approved",1)->get(); #Obviously the values on the view would be change to "AssessmentA", etc.
}
我这个可行吗?
提前致谢!
我想你会像这样创建任何数组:
$model_array = ['assessment_a' => AssessmentA::class];
然后在循环中简单地传递值
foreach ($user_entry as $entry){
$model_array[$entry]::where("approved",1)->get(); #Obviously the values on the view would be change to "AssessmentA", etc.
}
如果将 select 值更改为实际的 table 名称,则可以轻松完成
{{ Form::open(array('route' => 'search')) }}
<select multiple name="search_by_form[]">
<option selected>Any</option>
<option value="assessments_a">A</option>
<option value="assessments_b">B</option>
<option value="assessments_c">C</option>
</select>
{{ Form::close() }}
$user_entry = $request->input('search_by_form', []);
if (empty($user_entry)) {
model_results = collect();
} else {
$query = DB::table(array_shift($user_entry))->where('approved', 1);
foreach ($user_entry as $table) {
$query->union(fn($union) => $union->from($table)->where('approved', 1));
}
$model_results = $query->get();
}
我正在做一个 Laravel 项目,它应该是模块化的。
我写了一个搜索查询,我想要的是:
型号:
评估 A
评估 B
评估 C
查看:
{{ Form::open(array('route' => 'search')) }}
<select multiple name="search_by_form[]">
<option selected>Any</option>
<option value="assessment_a">A</option>
<option value="assessment_b">B</option>
<option value="assessment_c">C</option>
</select>
{{ Form::close() }}
控制器:
控制器要复杂得多,但我让您更容易理解我的需求。
现在是这样的:
$user_entry =$request->input('search_by_form', []);
$resultArray = [];
foreach ($user_entry as $entry){
if ($entry == "assessment_a"){
$model_results = AssessmentA::where("approved",1)->get();
} elseif ($entry == "assessment_b"){
$model_results = AssessmentB::where("approved",1)->get();
} elseif($entry == "assessment_c"){
$model_results = AssessmentC::where("approved",1)->get();
}
}
我想要的:
搜索视图控制器: foreach 通过特定文件夹中的模型
然后:
{{ Form::open(array('route' => 'search')) }}
<select multiple name="search_by_form[]">
<option selected>Any</option>
@foreach($models as $model)
<option value="{{ $model }}">{{ $model->name }}</option>
@endforeach
</select>
{{ Form::close() }}
与其采用这种丑陋的方法,不如采用更多类似的方法:
foreach ($user_entry as $entry){
$entry::where("approved",1)->get(); #Obviously the values on the view would be change to "AssessmentA", etc.
}
我这个可行吗?
提前致谢!
我想你会像这样创建任何数组:
$model_array = ['assessment_a' => AssessmentA::class];
然后在循环中简单地传递值
foreach ($user_entry as $entry){
$model_array[$entry]::where("approved",1)->get(); #Obviously the values on the view would be change to "AssessmentA", etc.
}
如果将 select 值更改为实际的 table 名称,则可以轻松完成
{{ Form::open(array('route' => 'search')) }}
<select multiple name="search_by_form[]">
<option selected>Any</option>
<option value="assessments_a">A</option>
<option value="assessments_b">B</option>
<option value="assessments_c">C</option>
</select>
{{ Form::close() }}
$user_entry = $request->input('search_by_form', []);
if (empty($user_entry)) {
model_results = collect();
} else {
$query = DB::table(array_shift($user_entry))->where('approved', 1);
foreach ($user_entry as $table) {
$query->union(fn($union) => $union->from($table)->where('approved', 1));
}
$model_results = $query->get();
}