问题描述
当我尝试将一组记录推送到我的 Laravel 集合时,我最终只将第一条记录插入到集合中。在我进行一些更改(与 $limit 和 $test 相关)之前它运行良好,但现在产生了这个错误。
public static function processOldOrders(int $limit = 1,bool $test = true)
{
//Read CSV and turn into a collection
$allOldOrders = Excel::toArray([],'orders.csv');
$orderCollection = collect();
$count = 0;
foreach ($allOldOrders as $key => $oldOrder) {
$orderCollection->push(
(object) [
'order_id' => ltrim($oldOrder[$key][0],"#"),'order_created' => $oldOrder[$key][4],'email' => $test ? 'test@test.com' : trim(strtolower($oldOrder[$key][5])),'phone' => ltrim($oldOrder[$key][12],"'"),'first_name' => $oldOrder[$key][7],'last_name' => $oldOrder[$key][8],'purchase_status' => 'a_purchase','total_price' => $oldOrder[$key][33],'items' => [],'gift_cards' => [],'coupons' => [],'shipping_data' => [],]
);
$count++;
if ($count >= $limit) {
break;
}
}
dd($orderCollection);
解决方法
在您的 processOldOrders 方法中,默认设置 limit = 1。在底部,
$count = 0;
foreach ($allOldOrders as $key => $oldOrder) {
...
$count++;
if ($count >= $limit) {
break;
}
...
你用计数检查它。第一次 $count
等于 0,你加上它 1。然后你用 $limit
检查它。默认限制为 1 。所以它只工作一次。您调用 processOldOrders
方法
您的代码没有任何问题。但是你忘记了 Excel::toArray()
的输出,它有子数组。
array:1 [
0 => array [ // <-- init
0 => array [ // <-- CSV data
...
因此,您可以将 $allOldOrders
更改为 $allOldOrders[0]
:
foreach ($allOldOrders[0] as $key => $oldOrder) {
...
}