2016-10-23 1 views
0

Szenario ist Zone enthalten wenige Städte, ich habe ein Problem in meinem Bearbeitungsformular.Laravel 5.2 Looping Wie kann man doppelte Ergebnisse verhindern?

Das Problem ist, ich muss Stadt Belons zu Zone selected=true machen und die andere Stadt, die nicht zu Zone in der Standardoption gehören.

So habe ich zwei Schleifen wie diese

@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 ist alle Stadt von der Steuerung übergebene Wert 1, 2, 3, 4, 5 ist, und $zone->cities ist Stadt, die den Wert der Zone gehört 1, 3, 5 ist.

Mit dem obigen Code bekomme ich dieses Ergebnis

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

das Ergebnis, das ich erwartete

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

Wie meine Looping Codelogik beheben ist?

Danke, jede Hilfe geschätzt.

AKTUALISIERT

Hier ist meine bearbeiten Controller

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

Antwort

0

können Sie versuchen, diese

In Ihrem Controller die Funktion

$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')); 

Ihrer Ansicht nach ändern Sie Ihre ganze Schleife wie unten

@foreach($cities as $city) 
    <option value="{{ $city->id }}" @if(in_array($city->id, $zoneCityIds)) selected @endif>{{ $city->name }}</option> 
@endforeach 

Hope this :) helfen

+0

Sie sparen meinen Tag es funktioniert, aber gibt es irgendwelche Anpassungen von Laravel, die dies ohne Spiel mit Array tun können? So etwas wie, wenn die Sammlung ein Objekt oder etwas anderes enthält. –

+0

Sie sollten diese Art von Betrieb in Controller, Laravel Sammlung ist ein Weg, aber in diesem Fall ist es nicht vorteilhafter – Vikash

+0

Ich habe gerade meine Frage aktualisiert, die meine Edit-Controller zeigen, vielleicht können Sie mir helfen, diese Operationen in Controller zu verschieben. –

0

Sie können machen dies so funktioniert:

@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 

Aber ich denke, das ist ein besserer Ansatz ist, und passen auf deine Bedürfnisse.

@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