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