如何解决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 举报,一经查实,本站将立刻删除。