Laravel如何从数据库中填充选择框

时间:2017-08-20 14:16:18

标签: php laravel controller

我有一个存储国家/地区列表的数据库表,现在我试图以下拉形式获取国家/地区列表,但是无法正常工作,也许我错过了什么。这是我的控制器代码

` public function details($id){
        //fetch post data
        //$post = Post::find($id);

        $country_options = Country::pluck('country', 'id');
        $country_options = DB::table('regions')->orderBy('country', 'asc')->pluck('country','id');

        //pass posts data to view and load list view
        return view('dashboard')->with('country_options',$country_options);

    }`

并且在我的表单中回显下拉列表的代码看起来像这样`'

@foreach($countries as $country)'+
               '<option value="{{ $country->id }}"> {{ $country->country }}</option>'+
               '@endforeach'+`

我的路线看起来像这样

Route::get('/Business', 'BusinessController@details')->name('Business');

但我不断收到此错误消息

Undefined variable: countries (View: C:\xampp\htdocs

进行了研究,但无法解决问题。 任何帮助将通过适当的文档/说明感谢。谢谢

3 个答案:

答案 0 :(得分:2)

您的错误是您将一个变量名称传递给您的视图并尝试使用其他名称进行阅读。我为你做了一些简单的例子。这里我的表是“Pais”(葡萄牙语中的“Country”),并使用clorure路由作为回调函数。 (Lavarel 5.4)

路线(web.php):

Route::get('/test', function () {
    $countries = \App\Pais::all();
    return view('test_stackoverflow')->with(['countries' => $countries]);
});

查看(test_stachoverflow.blade.php):

<select name="countries" id="countries">
  @foreach($countries as $country )
    <option value="{{ $country->id }}">{{ $country->name }}</option>
  @endforeach
</select>

Result

另一个选择,如果你想继续使用pluck方法:

路线(web.php):

Route::get('/test', function () {
  /* $countries = \App\Pais::pluck('name','id'); */
  // or
  $countries = DB::table('pais')->pluck('name','id');
  return view('test_stackoverflow')->with(['countries' => $countries]);
});

查看(test_stachoverflow.blade.php):

  <select name="countries" id="countries">
    @foreach($countries as $id => $country )
      <option value="{{ $id }}">{{ $country }}</option>
    @endforeach
  </select>

两种解决方案在生成的HTML中都有相同的结果。

希望这可以帮到你! 最好的问候。

答案 1 :(得分:1)

您从控制器传递country_options而不是countries

试试这个

@foreach($country_options as $country)
    <option value="{{ $country->id }}">
        {{ $country->country }}
    </option>
@endforeach

答案 2 :(得分:0)

如果你想要所有类别

,首先你不需要$ id

使用以下命令重新启动控制器代码:

public function details(){
    $country_options = Country::All();
    return view('dashboard',compact('countries'));
}