Laravel Collection 只推送一个记录

问题描述

当我尝试将一组记录推送到我的 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) {
    ...
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...