我的订单包含存储在items表中的任意数量的项目(因此两者之间的belongsToMany关系)。这些项目也按项目类型分类。在创建或编辑订单时,我想加载所有项目,按项目类型分类,该订单是否包含任何项目。我能够通过以下方式将其提升:
$itemtypes = \App\Itemtype::with('items')
->orderBy('id','asc')
->get();
然后我循环:
@foreach( $itemtypes as $itemtype )
{{$itemtype->name}}
@foreach( $itemtype->items as $item )
{{$item->name}}
@endforeach
@endforeach
这给了我类似的东西:
NICU项目 - 婴儿毯 - 串珠婴儿拥抱者
杂项 - 合身床单 - 超细纤维毛巾
但是,当我访问具有item_order记录的特定订单时,我想显示已保存的数量(存储在数据透视表中)。我知道一种方法是为每个创建的订单将所有项目的记录添加到item_order,但这似乎效率很低。
Item.php
public function orders() {
return $this->belongsToMany('App\Order', 'item_order', 'item_id', 'order_id') -> withPivot('id','quantity','createdby_user_id','weight','cost_billed', 'calc_by_weight', 'track_units');
}
Order.php
public function items() {
return $this -> belongsToMany('App\Item', 'item_order', 'order_id', 'item_id') -> withPivot('id','quantity','quantity_received','quantity_delivered','notes', 'createdby_user_id', 'weight', 'cost_billed', 'calc_by_weight', 'track_units');
}
更新
我正在寻找解决方案。我将集合转换为数组,加载所有项目,根据需要修改数组,然后使用array_merge替换item_order中已有数量的项目。
这一切都很有效 - 我现在唯一的问题是,当我加载订单时,商品有一个商品类型 - 分类,我想将它们分组那个。我不确定如何在关系中添加groupby。如果我把它弄清楚,我会发布完整的答案。