Значение $ total не устанавливается внутри функции карты коллекции люменов

У меня есть объект коллекции lumen для моего заказа, и я использую функцию map для его итерации и выполнения некоторой логики. Мне также нужна общая стоимость заказа, которая рассчитывается с использованием quantity * price, Но переменная, которая отвечает за хранение общего значения, всегда 0,

$total = 0;
$items = Cart_Item::where('user_id', $user->id)->get();
$items = $items->map(function ($item, $key) use ($order, $total) {
$product = Product::where('id', $item->product_id)->first();
$order_item = new Order_Item();
$order_item->order_id = $order->id;
$order_item->product_id = $item->product_id;
$order_item->quantity = $item->quantity;
$order_item->price = $product->GetPrice->price;
$order_item->save();
$total = $total + ($order_item->quantity * $order_item->price);
});

Что бы я ни делал, $total всегда возвращается 0,

1

Решение

Сфера вашего закрытие не весь файл, но он ограничен только тем, что находится между {} теги.

used переменные скопированный в область действия функции.

Одним из решений было бы сделать $total глобальная переменная:

$total = 0;
$items = Cart_Item::where('user_id', $user->id)->get();
$items = $items->map(function ($item, $key) use ($order, $total) {
$product = Product::where('id', $item->product_id)->first();
$order_item = new Order_Item();
$order_item->order_id = $order->id;
$order_item->product_id = $item->product_id;
$order_item->quantity = $item->quantity;
$order_item->price = $product->GetPrice->price;
$order_item->save();

global $total;
$total = $total + ($order_item->quantity * $order_item->price);
});

Другой способ передать глобальный в качестве ссылки &$total вот так:

$total = 0;
$items = Cart_Item::where('user_id', $user->id)->get();
$items = $items->map(function ($item, $key) use ($order, &$total) {
$product = Product::where('id', $item->product_id)->first();
$order_item = new Order_Item();
$order_item->order_id = $order->id;
$order_item->product_id = $item->product_id;
$order_item->quantity = $item->quantity;
$order_item->price = $product->GetPrice->price;
$order_item->save();

$total = $total + ($order_item->quantity * $order_item->price);
});
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]