создание условий для получения частичной доставки продуктов в laravel

#php #laravel #if-statement #conditional-statements

#php #laravel #if-оператор #условные операторы

Вопрос:

Это мой второй день попыток сделать «получение частичной доставки» для моего приложения. Я испытываю свою удачу здесь с вами, мастера.

У меня есть эти две таблицы, первая из которых — таблица order_items,

введите описание изображения здесь

В этой таблице хранятся товары из заказа на покупку. а другая таблица — это warehouse1

введите описание изображения здесь

в которых хранятся частично полученные товары.

Я понимаю логику, я должен сгруппировать warehouse1.order_item_id, чтобы я мог получить сумму элементов, скажем, из order_number_id=22, который является идентификатором из таблицы order_items. чтобы показать вам, вот мой код, выполняющий ГРУППОВОЕ

 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

 public function Warehouse1stocks()
{
    return $this->hasMany('AppWarehouse1stocks', 'id', 'order_item_id')->orderBy('created_at', 'DESC');
} 
  

Модель Warehouse1stocks

 public function orderItems()
{
    return $this->hasMany('AppOrderitems', 'order_id', 'id')->orderBy('created_at', 'DESC');

}
  

И в моем блейде, как я упоминал в своем вступлении, я делаю это уже почти 2 дня, я только начинаю писать свой собственный код, поэтому я полагаюсь на большую часть своей базы кодов из руководств и предложений, доступных в Google, я думаю, что я уже перепробовал слишком много подходов, и из-за отчаяния я заканчиваю этим,

 @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
  

** примечание: сначала в нем есть «@if ($loop->first)» прямо под первым ForEach. Я просто удаляю это.

Объяснение первый @foreach вызывает элементы из таблицы OrderItems, а второй вызывает элемент, который имеет (суммарное) количество частично полученных элементов

из моего условия if, если оба order_item_id равны, то запускает вычисление. если нет, то просто возьмите количество из таблицы order_items.

Но выполнение этого не дало того, каким должен быть мой ожидаемый результат.

Чтобы дать вам представление, вот скриншот моего блейда,

введите описание изображения здесь

Я знаю, что мой пост слишком длинный, но я думаю, мне нужно объяснить больше, чтобы, надеюсь, вы могли понять сценарий.

Мастера, я действительно надеюсь, что вы сможете мне с этим помочь. Заранее большое вам спасибо!!!

ОБНОВЛЕНИЕ (решаемое)

покопавшись еще немного в dipper, удалив и добавив некоторые коды и, что наиболее важно, после ответа @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!

Ответ №1:

Если вы спрашиваете, почему количество в вашем столбце количество не выдает вам форму, или почему возврат из этого ввода неверен, у вас есть несколько проблем, которые я вижу. Первая проблема заключается в том, что вы создаете n 1 количество элементов формы ввода чисел в одном пространстве с одинаковым идентификатором. Это, вероятно, предотвратит их отображение и никогда не создаст пригодную для использования форму. Это:

 {!! Form::number('stock_in_qty[]', $remainingDeliveries, 
                            ['id'=>'stock_in_qty_'.$orderItem->id]) !!} 
  

находится внутри вашего внутреннего цикла for. Таким образом, для каждого $partialDelivery в этом цикле вы создаете несколько числовых входов с точно таким же идентификатором ( 'stock_in_qty_'.$orderItem->id ).

Я не могу говорить за sql, поскольку я не знаю, что такое сброс, но это действительно помогло бы вам выполнить вычисления для $remainingDeliveries обратно в вашем контроллере. Зацикливание внутри большего <tr> цикла, вероятно, не самый простой способ получить ваши вычисления правильно или чисто. Но, если вы должны сделать это в блейд-файле, переместите числовой ввод за пределы цикла @foreach, чтобы у вас был ровно один ввод с одним идентификатором.

Комментарии:

1. Вы правы @Watercayman. Я просто перемещаю числовое поле за пределы цикла. Но с чем я все еще сталкиваюсь прямо сейчас, так это с тем, что если условие не равно, переменная «remainingDeliveries» не определена…