微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel Collection 只推送一个记录

如何解决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) {
    ...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。