为在laravel中接收部分交付产品创造条件

问题描述 投票:0回答:1

这是我第二天尝试为我的应用程序“接收部分交付”。我和你的主人在这里试试我的运气。

我有这两个表,第一个是order_items表,

enter image description here

此表包含采购订单中的项目。另一个表是warehouse1

enter image description here

持有部分接收物品。

我得到了逻辑,我必须对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表中获取数量。

但这样做并没有我预期的结果。

为了给你一个想法,这是我的刀片的截图,

enter image description here

我知道我的帖子太长了,但我想我需要解释更多,希望你能理解这个场景。

大师,我真的希望你能帮助我。非常感谢你!

更新(已解决)

在挖掘更多的铲斗,并删除并添加一些代码,最重要的是在关注@ 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!

php laravel if-statement condition
1个回答
1
投票

如果您问为什么数量列上的数量没有给您一个表单,或者为什么从该输入返回的结果不正确,您可能会遇到一些问题。第一个问题是您在具有相同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的输入。

© www.soinside.com 2019 - 2024. All rights reserved.