这是我第二天尝试为我的应用程序“接收部分交付”。我和你的主人在这里试试我的运气。
我有这两个表,第一个是order_items表,
此表包含采购订单中的项目。另一个表是warehouse1
持有部分接收物品。
我得到了逻辑,我必须对warehouse1.order_item_id进行分组,以便我可以从order_intms表中得到order_number_id = 22这个项的总和。告诉你,这是我做GROUP的代码
public function viewdeliveryItems($id)
{
$partialDeliveries = Warehouse1stocks::where('order_id', '=', $id)
->select(
'order_item_id',
DB::raw('SUM(stock_in_qty) as stock_in_qty'))->groupBy('order_item_id')->get();
// DB::raw('SUM(stock_out_qty) as stock_out_qty'))->groupBy('order_item_id')->get();
$order = Orders::find($id);
$orderItems = $order->orderItems;
$warehouse1stocks = Warehouse1stocks::all('order_id','order_item_id','stock_in_qty')->where('order_id','=',$id);
return view('orders.delivery')->with('order', $order)
->with('warehouse1stocks', $warehouse1stocks)
->with('partialDeliveries', $partialDeliveries);
}
在我的代码中,您将看到我对order_item_id进行分组并调用了订单商品,但您可以看到他们唯一的链接是ORDER_ID。
只是为了向您展示Orderitems Model中的雄辩联系
public function Warehouse1stocks()
{
return $this->hasMany('App\Warehouse1stocks', 'id', 'order_item_id')->orderBy('created_at', 'DESC');
}
Warehouse1stocks模型
public function orderItems()
{
return $this->hasMany('App\Orderitems', 'order_id', 'id')->orderBy('created_at', 'DESC');
}
在我的刀片中,正如我在介绍中提到的那样,我现在在将近2天内完成这项工作,我刚刚开始编写自己的代码,这就是为什么我依赖谷歌提供的教程和建议来支持我的大部分代码,我想我已经尝试了太多的方法,由于绝望,我最终得到了这个,
@foreach($order->orderItems as $key=>$orderItem)
<tr>
<td>{{ $orderItem->product_code }}</td>
<td>{{ $orderItem->product_name }}</td>
<td>
@foreach($partialDeliveries as $partialDelivery)
@if($partialDelivery->order_item_id == $orderItem->id)
@php
$remainingDeliveries = $orderItem->quantity - $partialDelivery->stock_in_qty;
@endphp
@else
@php
$remainingDeliveries = $orderItem->quantity;
@endphp
@endif
{!! Form::number('stock_in_qty[]', $remainingDeliveries,
['id'=>'stock_in_qty_'.$orderItem->id]) !!}
@endforeach
</td>
....
</tr>
@endforeach
**注意:首先它在第一个ForEach的下面有“@if($ loop-> first)”。我只是删除它。
解释第一个@foreach调用orderItems表中的项目,第二个调用具有部分接收项目(总和)数量的项目
从我的if条件,如果order_item_id都相等,则触发计算。如果没有,那么只需从order_items表中获取数量。
但这样做并没有我预期的结果。
为了给你一个想法,这是我的刀片的截图,
我知道我的帖子太长了,但我想我需要解释更多,希望你能理解这个场景。
大师,我真的希望你能帮助我。非常感谢你!
更新(已解决)
在挖掘更多的铲斗,并删除并添加一些代码,最重要的是在关注@ Watercayman的答案后,我终于解决了。对于那些也面临同样问题的人来说,这就是我所做的。
@if (isset($partialDeliveries[$key]))
@foreach($partialDeliveries as $partialDelivery)
@if($partialDelivery->order_item_id == $orderItem->id)
@php
$remainingDeliveries = $orderItem->quantity - $partialDelivery->stock_in_qty;
@endphp
@endif
@endforeach
@endif
@if (!isset($partialDeliveries[$key]))
@php
$remainingDeliveries = $orderItem->quantity;
@endphp
@endif
我不能解释一切因为我不能:)
谢谢@Watercatman!
如果您问为什么数量列上的数量没有给您一个表单,或者为什么从该输入返回的结果不正确,您可能会遇到一些问题。第一个问题是您在具有相同ID的同一空间中创建n + 1个数字输入表单项。这可能会阻止它们出现,并且永远不会产生可用的形式。这个:
{!! Form::number('stock_in_qty[]', $remainingDeliveries,
['id'=>'stock_in_qty_'.$orderItem->id]) !!}
在你的内部for循环中。因此,对于该循环中的每个$partialDelivery
,您将创建具有完全相同id('stock_in_qty_'.$orderItem->id
)的多个数字输入。
我不能代表sql,因为我不知道什么是倾销,但它真的可以帮助你在控制器中对$remainingDeliveries
进行计算。在较大的<tr>
循环内循环可能不是正确或干净地计算的最简单方法。但是,如果您必须在刀片文件中执行此操作,请将数字输入移到@foreach循环外部,以便您只有一个带有一个ID的输入。