Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel CSV导入仅保存数据库中的最后一行(id正确递增)_Php_Laravel_Maatwebsite Excel - Fatal编程技术网

Php Laravel CSV导入仅保存数据库中的最后一行(id正确递增)

Php Laravel CSV导入仅保存数据库中的最后一行(id正确递增),php,laravel,maatwebsite-excel,Php,Laravel,Maatwebsite Excel,使用Laravel6和LaravelExcel3.1,我尝试从CSV文件导入事务。 我跟着 结果是,只有最后一行被添加到数据库中。创建的ID基于正确数量的记录。当我启用进度条时,我确实看到所有行都已处理(但结果相同) 例如,我从空数据库开始,导入10条记录,导入后我看到一行包含最后一行的值,ID为10 我添加了控制台命令: $this->line('before - count: '. Transaction::count() .' - last ID: '. Transacti

使用Laravel6和LaravelExcel3.1,我尝试从CSV文件导入事务。 我跟着

结果是,只有最后一行被添加到数据库中。创建的ID基于正确数量的记录。当我启用进度条时,我确实看到所有行都已处理(但结果相同)

例如,我从空数据库开始,导入10条记录,导入后我看到一行包含最后一行的值,ID为10

我添加了控制台命令:

    $this->line('before  - count: '. Transaction::count() .' - last ID: '. Transaction::max('id'));
    Excel::import(new TransactionsImport, $file);
    $this->line('after  - count: '. Transaction::count() .' - last ID: '. Transaction::max('id'));
导入3条记录时的输出示例:

before - count: 27 - last ID: 77
after  - count: 28 - last ID: 80
导入到集合中时,我会看到三项:

    $collection = Excel::toCollection(new TransactionsImport, $file);
    $this->line("raw CSV items imported into collection: ". $collection[0]->count() ); // 3
它返回集合中的集合:

Illuminate\Support\Collection^ {#975
  #items: array:1 [
    0 => Illuminate\Support\Collection^ {#978 // collection for 3 rows
      #items: array:3 [
        0 => Illuminate\Support\Collection^ {#981 // collection for 1 record
          #items: array:9 [
            "datum" => 20190905.0 // the original CSV labels+values
            ...
我使用php artisan make:import TransactionImport--model=Transaction创建了导入模型:

class TransactionsImport implements ToModel, WithHeadingRow
{
    public function model(array $row)
    {
        return new Transaction([
            'date' => Carbon::parse($row['datum']),
            'name' => $row['naam_omschrijving'],
            'account' => $row['rekening'],
            'accountFrom' => $row['tegenrekening'],
            'mutationCode' => $row['code'],
            'afBij' => $row['af_bij'],
            'amount' => $row['bedrag_eur'],
            'mutationType' => $row['mutatiesoort'],
            'message' => $row['mededelingen'],
        ]);
    }
}
更新:添加了有关导入到集合的详细信息


更新:将
与批插入一起使用时,行为会发生变化(但仍然不稳定)。将
batchSize()
设置为5000:正确导入包含3829条记录的文件,而包含12657条记录的文件仅导入最后2657条记录(前10000条记录已处理但未存储)。当
batchSize()
设置为13000时,我的内存不足。尝试使用
将batchInserts
chunkSize()设置为5000,导入过程在10000条记录后冻结30秒以上,最终导入总共5171条记录。

您是否尝试过使用$ModelObject->save()或$ModelObject->creat()雄辩的功能?文档中明确指出,您不应自行保存模型。():“将为您保存返回的模型。每行将导致(至少)一次保存,并且还会触发模型事件。使用ToModel时,您不应自己保存模型,因为这将破坏批插入功能。”