首页 > 解决方案 > 遍历数组,并通过添加计数器更改项目详细信息

问题描述

我是 Laraver 的新手,我正在使用 Eloqunet 模型... deleteItem 函数,使用 offer_in 和 nbr 删除项目...当删除项目时,我想从具有相同 offer_id 的每个项目中添加一个新的 nbr,从 1 开始。我需要定义计数器= 1,每个项目加1..我不知道如何编写一个for循环或foreach循环,它通过选定的项目,并用计数器的相应值更改'nbr'?

我的代码是:

public function deleteItem(Request $request, $offer_id, $nbr) {
    $item = OfferItem::select('id', 'offer_id', 'nbr', 'product', 'quantity', 'item_price', 'item_tax', 'item_total')
                     ->where('offer_id', $offer_id)
                     ->where('nbr', $nbr)
                     ->first();
    $item->delete();
        
    //select new items for offer, after deleting item
    $items = OfferItem::select('id', 'offer_id', 'nbr', 'product', 'quantity', 'item_price', 'item_tax', 'item_total')
                      ->where('offer_id', $offer_id)
                      ->get();

    //todo

    return response()->json($item);
}

标签: laravelfor-loopforeacheloquent

解决方案


您可以像这些示例中那样纯粹在 SQL 中实现这一点。

你可以通过以下方式使用 Laravel 实现你想要的:

public function deleteItem(Request $request, $offer_id, $nbr) {
    OfferItem::query()
             ->where('offer_id', $offer_id)
             ->where('nbr', $nbr)
             ->delete();
        
    // Select new items for offer, after deleting item
    $items = OfferItem::where('offer_id', $offer_id)
                      ->where('nbr', '>', $nbr)
                      ->get()
                      ->sortBy('nbr')
                      ->map(function ($item) use ($nbr) {
                          $update = [
                              'id' => $item->id,
                              'nbr' => $nbr,
                          ];
                          
                          $nbr++;

                          return $update;
                      });

    OfferItem::query()->update($items);

    return response()->json($item); // It is not clear from your question what you
                                    // are trying to return here. Why would you
                                    // return a deleted item?
}

推荐阅读