在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
答案 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整数。