Laravel 循环问题
Laravel loop issue
我需要有关循环我的产品选项的帮助,这就是我现在拥有的:
我想要的只是为 color
获得 2 行的唯一一个,为 size
获得另一行,并且在每个行前面的下拉列表中都有所有项目。
这是我的 blade 代码:
<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 结果 {dd($product->suboptions)}}
要实现这一点,您需要先获取选项,然后编写一个方法来通过产品 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;
}
然后在view里面,你调用这个方法,放在2个foreach,一个option,一个sub-option。就像下面的代码:
<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>
我不知道你的模型方法是什么,但你可以理解这个概念。
我再重复一遍
你不应该完全复制我的代码。只要遵循我在说什么的概念。
不过这次是按照你的eloquent方法。此代码应该有效。
您可以先将它们与 mapToGroups() 函数组合在一起以获得 collection
https://laravel.com/docs/5.5/collections#method-maptogroups
$something = $product->suboptions->mapToGroups(function ($item, $key) {
return [$item->option->title => $item];
});
你应该 dd() 看看输出是什么并理解它。
之后,您可以使用 foreach 循环遍历它们,您的 blade 应该类似于
<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>
我需要有关循环我的产品选项的帮助,这就是我现在拥有的:
我想要的只是为 color
获得 2 行的唯一一个,为 size
获得另一行,并且在每个行前面的下拉列表中都有所有项目。
这是我的 blade 代码:
<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 结果 {dd($product->suboptions)}}
要实现这一点,您需要先获取选项,然后编写一个方法来通过产品 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;
}
然后在view里面,你调用这个方法,放在2个foreach,一个option,一个sub-option。就像下面的代码:
<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>
我不知道你的模型方法是什么,但你可以理解这个概念。
我再重复一遍 你不应该完全复制我的代码。只要遵循我在说什么的概念。
不过这次是按照你的eloquent方法。此代码应该有效。
您可以先将它们与 mapToGroups() 函数组合在一起以获得 collection
https://laravel.com/docs/5.5/collections#method-maptogroups
$something = $product->suboptions->mapToGroups(function ($item, $key) {
return [$item->option->title => $item];
});
你应该 dd() 看看输出是什么并理解它。
之后,您可以使用 foreach 循环遍历它们,您的 blade 应该类似于
<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>