Vit*_*Vit 0 php foreach laravel laravel-5
我尝试了很多代码变体,并试图在其他主题中找到类似的问题。所以,我有表用户,其中每个用户都有一个城市(存储为一个数字),当然还有带有 id 和城市名称的表城市(有 40 个城市)。当真实用户打开他的个人资料设置页面时,我希望他的城市被选中并以表格形式显示。在此示例中,用户表“Alex”的城市为“2”。在城市表中:id "2" 和 name_ru "cityB"。
如果我尝试这个:
@foreach(App\City::get() as $city)
<option value='{{ $city->id }}'>{{ $city->name_ru }}</option>
@endforeach
Run Code Online (Sandbox Code Playgroud)
它只显示城市,但我需要这样的结果:
<option value="1" > cityA</option>
<option selected value="2" > cityB </option>
<option value="3" > cityC </option>
Run Code Online (Sandbox Code Playgroud)
所以问题是 - 如何使 SELECTED 只有一个标签 OPTION,其 VALUE 等于该城市的编号,该编号存储在表 users 中的“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
Run Code Online (Sandbox Code Playgroud)
如果我试试这个:
@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
Run Code Online (Sandbox Code Playgroud)
我得到:
<option selected value="2" > cityA</option>
<option selected value="2" > cityB</option>
<option selected value="2" > cityC</option>
Run Code Online (Sandbox Code Playgroud)
请帮忙
您不应该在视图中使用模型查询,因为这是一种不好的做法,因为您没有遵循 MVC 模式。你可以试试这个:
在你的控制器内部:
class UsersController extends Controller {
public function users() {
$users = User::with('city')->get();
$cities = City::all();
return view('view_name', compact('users', 'cities'));
}
}
Run Code Online (Sandbox Code Playgroud)
在刀片视图中,您可以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
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
尝试这个:
@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
Run Code Online (Sandbox Code Playgroud)
编辑:从模型中获取数据(例如App\City::get()在视图上)不是一个好主意,而是在控制器上获取它并将其传递给视图是正确的方法。
| 归档时间: |
|
| 查看次数: |
15634 次 |
| 最近记录: |