我尝试了很多代码变体并试图在其他主题中找到类似的问题。所以,我有桌面用户,每个用户有一个城市(存储为数字),当然还有城市的id和城市名称(有40个城市)。 当真实用户打开他的个人资料设置页面时,我希望他的城市被选中并以表格形式显示。在用户表中的这个示例中,“Alex”具有城市“2”。在表格城市:id“2”和name_ru“cityB”。
如果我试试这个:
@foreach(App\City::get() as $city)
<option value='{{ $city->id }}'>{{ $city->name_ru }}</option>
@endforeach
它只显示城市,但我需要这样的结果:
<option value="1" > cityA</option>
<option selected value="2" > cityB </option>
<option value="3" > cityC </option>
所以问题是 - 如何使SELECTED只有一个标签OPTION,其中VALUE等于该城市的数量,该数据存储在“Alex”的表用户中。
我想到了这一点,但它没有显示任何内容:
@foreach(App\City::get() as $city)
@if($user->city ==1)
<option selected value="1" > {{ $city->name_ru }}</option>
@elseif($user->city ==2)
<option selected value="2" > {{ $city->name_ru }}</option>
....
@endif
@endforeach
如果我试试这个:
@foreach(App\City::get() as $city)
@if($user->city ==1)
<option selected value="1" > {{ $city->name_ru }}</option>
@endif
@endforeach
@foreach(App\City::get() as $city)
@if($user->city ==2)
<option selected value="2" > {{ $city->name_ru }}</option>
@endif
@endforeach
@foreach(App\City::get() as $city)
@if($user->city ==3)
<option selected value="3" > {{ $city->name_ru }}</option>
@endif
@endforeach
我明白了:
<option selected value="2" > cityA</option>
<option selected value="2" > cityB</option>
<option selected value="2" > cityC</option>
请帮助
答案 0 :(得分:1)
您不应在视图中使用模型查询,因为这不是一种不好的做法,因为您没有关注MVC模式。你可以试试这个:
在你的控制器内:
class UsersController extends Controller {
public function users() {
$users = User::with('city')->get();
$cities = City::all();
return view('view_name', compact('users', 'cities'));
}
}
在您的刀片视图中,您可以使用ternary operator
,如下所示:
@foreach($users as $user)
<select>
@foreach($cities as $city)
<option value="{{ $city->id }}" {{ ($user->city->id == $city->id) ? 'selected' : '' }}>
{{ $city->name }}
</option>
@endforeach
</select>
@endforeach
希望这有帮助!
答案 1 :(得分:1)
<select name="cities" id="cities">
<option value="">Select Cities</option>
@foreach($cities as $city){
<option value="{{$city->id}}{{($result->cityid==$city->id)?'SELECTED':''; ?>">{{$city->name}}</option>
}
@endforeach
答案 2 :(得分:0)
当您在模型上使用 get()
方法时,您将返回一个集合。因此,如果您需要用户城市成为 select
输入中的第一个,您可以对返回的集合使用 except([])
集合方法。
except 方法返回集合中除具有指定键的项外的所有项
不言而喻,但尝试在控制器中查询您的模型(如上文 Saumya 所述)。
class UsersController extends Controller {
public function users() {
$users = User::where('users.id', '=', \Auth::user()->id)
->join('city', 'city.id', '=', 'users.city')
->select('users.*', 'city.name_ru as city_name')
->get();
$cities = City::get();
return view('users.settings', compact('users', 'cities'));
}
}
<select>
<option value="{{ $users->city}}">{{ $users->city_name }}</option>
@foreach($cities->except([$users->city]) as $city)
<option value="{{ $city->id }}">{{ $city->name_ru }}</option>
@endforeach
</select>
另一种替代方法是 whereNotIn()
收集方法:
Collection->whereNotIn('key', [])
<块引用>whereNotIn 方法通过给定数组中不包含的给定键/值过滤集合
<select>
<option value="{{ $users->city}}">{{ $users->city_name }}</option>
@foreach($cities->whereNotIn('id', [$users->city]) as $city)
<option value="{{ $city->id }}">{{ $city->name_ru }}</option>
@endforeach
</select>
答案 3 :(得分:-1)
试试这个:
@foreach(App\City::get() as $city)
$selected = '';
if($city->id == 1) // Any Id
{
$selected = 'selected="selected"';
}
// $selected is initially empty and when the if criteria met it contains selected which make dropdown selected
<option value='{{ $city->id }}' {{$selected}} >{{ $city->name_ru }}</option>
@endforeach