2016-10-23 3 views
0

シナリオにはいくつかの都市が含まれていますが、編集フォームに問題があります。Laravel 5.2 Looping結果が重複しないようにする方法は?

問題はゾーンselected=trueに都市belonsを作る必要があり、デフォルトオプションでゾーンに属していない他の都市です。

は、だから私はこの

@foreach($cities as $city) 
    @foreach($zone->cities as $zone_city) 
     @if($city->id == $zone_city->id) 
      <option value="{{ $city->id }}" selected="true">{{ $city->name }}</option> 
     @endif 
    @endforeach 
//if current city id not yet printed before then 
<option value="{{ $city->id }}">{{ $city->name }}</option> 
@endforeach 

$citiesのような2つのループを持っていることは価値がある1, 2, 3, 4, 5コントローラから渡されたすべての都市であり、そして$zone->cities値は1, 3, 5あるゾーンに属している都市です。上記のコードでは

私はこの結果を得る

<option value="1" selected="true">Surabaya</option> 
<option value="1">Surabaya</option>  
<option value="2">Sidoarjo</option> 

<option value="3" selected="true">Malang</option> 
<option value="3">Malang</option> 

<option value="4" selected="true">Gresik</option> 
<option value="4">Gresik</option>  
<option value="5">Madura</option> 

私が期待される結果は、私のループコードのロジックを修正する方法

<option value="1" selected="true">Surabaya</option> 
<option value="2">Sidoarjo</option> 

<option value="3" selected="true">Malang</option> 

<option value="4" selected="true">Gresik</option> 
<option value="5">Madura</option> 

のですか?

ありがとうございました。

@foreach($cities as $city) 
$currentCity = false; 
@foreach($zone->cities as $zone_city) 
    @if($city->id == $zone_city->id) 
     $currentCity = true; 
     <option value="{{ $city->id }}" selected="true">{{ $city->name }}</option> 
    @endif 
@endforeach 
//if current city id not yet printed before then 
@if($currentCity) 
<option value="{{ $city->id }}">{{ $city->name }}</option> 
@endif 
@endforeach 

しかし、私は、これはより良いアプローチだと思う、とにフィット:ここ

を更新し

は私の編集コントローラ

public function zone_edit($id) 
{ 
    $zone = Zone::find($id); 
    $cities = City::all(); 
    return view('backend.admin.pricings.zone_edit', compact('zone', 'cities')); 
} 

答えて

0

あなたは、これが:)

を助けることを願っています
@foreach($cities as $city) 
    <option value="{{ $city->id }}" @if(in_array($city->id, $zoneCityIds)) selected @endif>{{ $city->name }}</option> 
@endforeach 

の下のようにあなたの全体のループを修正し、あなたのビューでは、コントローラの機能

$zoneCityIds = []; 
$zone = Zone::find($id); 
$cities = City::all(); 

foreach ($zone->cities as $zoneCity) 
{ 
    $zoneCityIds[] = $zoneCity->id 
} 

return view('backend.admin.pricings.zone_edit', compact('zone', 'cities','zoneCityIds')); 

ではこの

を試すことができます

+0

あなたは私の日を救うそれは動作しますが、配列で遊びをしなくてもこれを行うことができるlaravelからの資金がありますか?コレクションにオブジェクトやその他のものが含まれているかのようなもの。 –

+0

コントローラでこれらの操作を行う必要がありますが、laravelコレクションは方法ですが、この場合はそれほど有益ではありません – Vikash

+0

私の編集コントローラを表示する質問を更新しました。 –

0

は、あなたが、これはこのように動作させることができていますあなたの必要性。

@foreach($cities as $city) 
    @foreach($zone->cities as $zone_city) 
     <option value="{{ $city->id }}" @if($city->id == $zone_city->id) selected="true" @endif >{{ $city->name }}</option> 
    @endforeach 
@endforeach 
関連する問題