#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» не определена…