Laravel 5选择当前下拉和laravel集体中的剩余部分

时间:2018-03-20 20:43:22

标签: php laravel laravelcollective

在laravel控制器中,我目前有两个变量,它们来自各自的模型。

$guests = Person::where('id', $id)
                  ->with('languages')
                  ->get();

        $languages = Language::pluck('name')->toArray();

        return view('layouts.visitor', ['guests' => $guests, 'languages' => $languages]);
数据库表中的

我有几个不同的字段:

id | name
----------
1  | spanish
2  | english
3  | french

选择语言时,我可以选择分配给用户的语言。我也可以选择表格中的所有语言。我想做的并且我无法弄明白的是让它在页面加载时首先显示分配给用户的当前语言然后如果用户想要更改它,他们应该查看所有其他下拉列表中提供的语言。

如果此用户的默认语言是西班牙语,则应如下所示:

Drop down:
Spanish
English
French

3 个答案:

答案 0 :(得分:0)

如果这是用户选择的语言,您可以将selected属性添加到下拉选项中:

<select name="language">
  @foreach($languages as $language)
  <option value="{{$language->id}}" @if($user->language_id == $language->id) selected @endif>{{$language->name}}</option>
  @endforeach
</select>

答案 1 :(得分:0)

我假设你正在使用one to many关系。您的persons表格中有一个language_id列,它是languages表的外键。

在这种情况下,您的控制器应如下所示:

public function show($id){
    $guests = Person::query()->findOrFail($id); //find a row with an id

    $languages = Language::pluck('name','id'); //'name' is the value and 'id' the key of the array

    return view('layouts.visitor', ['guests' => $guests, 'languages' => $languages]);
}

<强>刀片:

在刀片中保持默认值为null。它将从数据库中检索language_id列的值。

{{ Form::select('language_id',$languages,null,['otherAttribute'=>'ifAny']) }} 

答案 2 :(得分:0)

select方法的第三个参数负责选择当前相关属性。与smartrahat回答一样,您可以将pluck更正为..pluck('name','id'),然后再查看:

{{ Form::select('language_id',$languages,$guests->language,['class' => 'form-control']) }}

此解决方案假定Person模型名为language的属性,它应该是语言id整数。