Laravel循环问题

时间:2018-01-19 00:51:06

标签: php laravel laravel-blade

我需要帮助来循环我的产品选项,这就是我现在所拥有的:

shoot

我想要的只是获得2行仅color的一行而size的另一行,并且每个行前面的下拉列表中包含所有项目。

这是我的刀片代码:

<tbody>
  @foreach($product->suboptions as $option)
  <tr>
    <td style="width: 150px;">{{ $option->option->title }}</td>
    <td class="text-left">
       <select name="" id="">
         <option value="{{$option->id}}">{{$option->title}} - {{ number_format($option->price, 0) }}</option>
       </select>
    </td>
  </tr>
  @endforeach
</tbody>

更新

我的{dd($product->suboptions)}}

的结果

shoot2

2 个答案:

答案 0 :(得分:2)

为了完成您需要首先获得选项,并编写一个方法来通过产品ID或产品对象访问选项。所以你可以在产品模型中找到这样的东西:

   public function get_option($product_id){

       $sub_options = Product::whereId($product_id)->first()->suboptions()->get();

       $option = array();
       foreach($sub_options as $sub_option){
         $option[] = $sub_option->options()->get();
       }

    return $option;
  }

然后在视图中,您只需调用此方法并将其放在2个foreach中,一个用于选项,另一个用于子选项。像下面这段代码:

<tbody>
  @foreach($product->get_option($product->id) as $key=>$value)
  <tr>
    <td style="width: 150px;">{{ $value->title }}</td>
     <td class="text-left">
       <select name="" id="">
         @foreach($value->suboptions() as $key=>$value2)
         <option value="{{$value2->id}}">{{$value2->title}} - {{number_format($value2->price, 0) }}</option>
         @endforeach
       </select>
    </td>
  </tr>
  @endforeach
</tbody>

我不知道你的模型方法是什么,但你可以得到这个概念。

我再说一遍 你不应该完全复制我的代码。跟随我所说的概念。

但这次根据你雄辩的方法。这段代码应该有用。

答案 1 :(得分:1)

您可以先将它们与mapToGroups()函数组合在一起进行集合 https://laravel.com/docs/5.5/collections#method-maptogroups

$something = $product->suboptions->mapToGroups(function ($item, $key) {
    return [$item->option->title => $item];
});

你应该dd()看看输出是什么并理解它 在那之后你可以用foreach循环它们,你的刀片应该像

<tbody>
  @foreach($something as $optiontitle => $optioncollection)
  <tr>
    <td style="width: 150px;">{{ $optiontitle }}</td>
    <td class="text-left">
      <select name="" id="">
        @foreach($optioncollection as $suboption)
          <option value="{{$suboption->id}}">{{$suboption->title}} - {{ number_format($suboption->price, 0) }}</option>
        @endforeach
      </select>
    </td>
  </tr>
  @endforeach
</tbody>