【发布时间】:2019-01-18 19:08:58
【问题描述】:
我在 Symfony3 中制作了控制台应用程序,用户可以在其中将 CSV 文件(验证)导入数据库。我需要将未通过验证的记录放入单独的文件中。
我使用 LeagueCSV 读取 CSV 文件,并尝试使用它来写入未经验证的记录,但它不起作用。
这是我的代码:
$reader = Reader::createFromPath($input->getArgument('lokalizacja'));
$reader->setDelimiter(';');
$reader->setHeaderOffset(0);
$results = $reader->getRecords();
foreach ($results as $row) {
$year = $row['description'];
$isValid = false;
if ($row['qty'] > 0 && $row['price'] > 0 && !empty($row['mpn'])) {
$isValid = true;
$rok = filter_var($row['description'], FILTER_SANITIZE_NUMBER_INT);
$product = (new Produkt())
->setMpn($row['mpn'])
->setQty($row['qty'])
->setYear($year)
->setPrice($row['price']);
$this->em->persist($product); }
if ($row['qty'] == 0 || $row['price'] == 0 || empty($row['mpn'])) {
$writer = Writer::createFromPath('/path/to/saved/file.csv', 'w+');
$writer->insertOne([$row['mpn'], $row['qty'], $row['price'],
$row['description']]);
continue;
}
}
$this->em->flush();
所有通过验证的记录都成功保存在数据库中,但我对其他记录有问题。在新的 CSV 文件中,我只有第一个,一条未通过验证的记录,仅此而已。我究竟做错了什么?我试过了
$writer->insertAll($results); //using an array
或者使用 if...else 语句,但这没什么。
我还做了 ...else 语句,其中未经验证的记录保存在数据库的其他表中,但我不知道如何立即将它们转换为 CSV 文件。
【问题讨论】:
-
尝试在
foreach循环之前移动$writer = Writer::createFromPath('/path/to/saved/file.csv', 'w+'); -
天哪 ;D 终于成功了!非常感谢!
-
太棒了!我添加了一个答案
标签: php symfony csv export-to-csv