foreach Laravel-5 <option select =“”

时间:2016-12-12 12:39:08

标签: php laravel laravel-5 foreach

=“”

我尝试了很多代码变体并试图在其他主题中找到类似的问题。所以,我有桌面用户,每个用户有一个城市(存储为数字),当然还有城市的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>

请帮助

4 个答案:

答案 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([]) 集合方法。

Collection->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