【问题标题】:Laravel 5.2 Looping How to prevent duplicate result?Laravel 5.2 循环如何防止重复结果?
【发布时间】:2016-10-23 06:11:15
【问题描述】:

场景是区域包含几个城市,我的编辑表单有问题。

问题是我需要在默认选项中将城市归属于区域selected=true 和其他不属于区域的城市。

所以我有两个这样的循环

@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是控制器传递的所有城市,值为1, 2, 3, 4, 5,$zone-&gt;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>

如何修复我的循环代码逻辑?

谢谢,感谢任何帮助。

更新

这是我的编辑控制器

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

【问题讨论】:

    标签: laravel


    【解决方案1】:

    你可以试试这个

    在你的控制器函数中

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

    在您的视图中修改您的整个循环,如下所示

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

    希望这会有所帮助:)

    【讨论】:

    • 你拯救了我的一天,它的工作原理,但是有没有来自 laravel 的装置可以在不玩数组的情况下做到这一点?类似于 if 集合包含对象或其他内容。
    • 你应该在控制器中做这些操作,laravel收集是一种方式,但在这种情况下它并不是更有利
    • 我刚刚更新了我的问题,它显示了我的编辑控制器,也许你可以帮我在控制器中移动这个操作。
    • 当然。我正在尝试
    • 请告诉我一个城市只属于一个区域?然后我可以定义一些模态函数,它会更干净,更好的代码。
    【解决方案2】:

    你可以这样工作:

    @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
    

    但我认为这是一种更好的方法,并且适合您的需求。

    @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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 2014-03-27
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多