laravel 中 map() 的 excat 功能是什么?
what is excat functionality of map() in laravel?
我正在从数据库中获取数据,然后向该数据添加一个属性。为此,我在这个函数中使用了 map()
,因为我使用的是具有 5
值的 $qty
变量。
然后我将在下一次迭代中降低它的价值,但不幸的是,这并没有发生
$qty = $request->product_qty;
$searchProducts->map(function ($product) use ($qty) {
$qty_taken = $qty - $product->free_qty;
$product->setAttribute('qty_taken',$qty);
$qty = $qty - $product->free_qty;
return $product;
});
我认为每次 map()
都在提供值 5
map 不会让逻辑减少其值。
map()
方法迭代 collection 和 returns 一个新的 collection 由从传递给 map()
的闭包返回的项目组成。
由于您没有尝试生成新的 collection,因此 map()
不是您要查找的内容。您只是尝试遍历 collection 并使用每个项目执行一些操作。为此,您将使用 each()
方法。或者,您可以使用简单的 foreach
循环。
您的 $qty
变量未更新的原因是,就像函数参数一样,use
参数默认按值传递。如果您希望对 $qty
变量的更改在迭代中持续存在,则需要通过引用传递它(在变量前加上 & 符号 (&))。
因此,要修复您的代码,有两种选择。
要继续使用 collection 方法,请切换到 each()
并通过引用传递(注意 & 符号):
$qty = $request->product_qty;
$searchProducts->each(function ($product) use (&$qty) {
$qty_taken = $qty - $product->free_qty;
$product->setAttribute('qty_taken', $qty);
$qty = $qty - $product->free_qty;
});
您也可以只使用普通的 PHP foreach
,这样您就不必担心 $qty
变量的范围,因为它都是本地的。
$qty = $request->product_qty;
foreach ($searchProducts as $product) {
$qty_taken = $qty - $product->free_qty;
$product->setAttribute('qty_taken', $qty);
$qty = $qty - $product->free_qty;
});
我正在从数据库中获取数据,然后向该数据添加一个属性。为此,我在这个函数中使用了 map()
,因为我使用的是具有 5
值的 $qty
变量。
然后我将在下一次迭代中降低它的价值,但不幸的是,这并没有发生
$qty = $request->product_qty;
$searchProducts->map(function ($product) use ($qty) {
$qty_taken = $qty - $product->free_qty;
$product->setAttribute('qty_taken',$qty);
$qty = $qty - $product->free_qty;
return $product;
});
我认为每次 map()
都在提供值 5
map 不会让逻辑减少其值。
map()
方法迭代 collection 和 returns 一个新的 collection 由从传递给 map()
的闭包返回的项目组成。
由于您没有尝试生成新的 collection,因此 map()
不是您要查找的内容。您只是尝试遍历 collection 并使用每个项目执行一些操作。为此,您将使用 each()
方法。或者,您可以使用简单的 foreach
循环。
您的 $qty
变量未更新的原因是,就像函数参数一样,use
参数默认按值传递。如果您希望对 $qty
变量的更改在迭代中持续存在,则需要通过引用传递它(在变量前加上 & 符号 (&))。
因此,要修复您的代码,有两种选择。
要继续使用 collection 方法,请切换到 each()
并通过引用传递(注意 & 符号):
$qty = $request->product_qty;
$searchProducts->each(function ($product) use (&$qty) {
$qty_taken = $qty - $product->free_qty;
$product->setAttribute('qty_taken', $qty);
$qty = $qty - $product->free_qty;
});
您也可以只使用普通的 PHP foreach
,这样您就不必担心 $qty
变量的范围,因为它都是本地的。
$qty = $request->product_qty;
foreach ($searchProducts as $product) {
$qty_taken = $qty - $product->free_qty;
$product->setAttribute('qty_taken', $qty);
$qty = $qty - $product->free_qty;
});