【面向初学者】Laravel:尝试导入 CSV 文件!

大家好!我是系统开发部的福井!
今天,我想向大家介绍一下我是如何在 Laravel 中使用 Goodby CSV 库导入 CSV 文件的!
*这是我的第一篇博客文章,所以我非常激动地写下了它……!
顺便一提,这次我使用的是在 Homestead 环境下创建的 Laravel 项目。
环境配置如下:
PHP 7.4.5
、Laravel 7.14.1
、MySQL 5.7
目录
・准备工作
・安装 Goodby CSV 库
・创建 CSV 导入方法
・测试操作
・总结
・奖励
提前准备
这次,我将创建一个简单的表格,只记录书籍的“标题”和“价格”。
| 表名 | 图书 |
|---|---|
| 柱子 | ID、标题、价格 |
Schema::create('books', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->integer('price'); $table->timestamps(); });
这是我准备的视图。

(是的,很简单!抱歉!)
路由、CSV 导入方法和模型都已就绪,下一步是安装 Goodby CSV 库。
安装 Goodby CSV 库
运行以下命令安装 Goodby CSV 库:
composer 需要 goodbye/csv
请等待其完成。

安装完成后,请按照 Goodby CSV GitHub 页面上的 README 文件中的说明进行操作,并将以下 use 声明添加到相应的控制器中:
Goodby CSV GitHub
使用 Goodby\CSV\Import\Standard\LexerConfig;使用 Goodby\CSV\Import\Standard\Lexer;使用 Goodby\CSV\Import\Standard\Interpreter;
创建 CSV 导入方法
CSV导入部分的代码如下。
在保存到数据库之前,会执行Goodby CSV配置设置和字符集转换。
public function importCsv(Request $request) { // 保存 CSV 文件 $tmpName = mt_rand().".".$request->file('csv')->guessExtension(); // 临时文件名 $request->file('csv')->move(public_path()."/csv/tmp",$tmpName); $tmpPath = public_path()."/csv/tmp/".$tmpName; // 移除 CSV 配置设置 $config = new LexerConfig(); $interpreter = new Interpreter(); $lexer = new Lexer($config); // 将字符集转换为 UTF-8,忽略 CSV 标题行 $config->setToCharset("UTF-8"); $config->setFromCharset("sjis-win"); $config->setIgnoreHeaderLine(true); $dataList = []; // 将值赋给 $dataList 数组作为新的观察者 $interpreter->addObserver(function (array $row) use (&$dataList){ // 获取每一列的数据 $dataList[] = $row; }); // 解析 CSV 数据 $lexer->parse($tmpPath, $interpreter); // 删除临时文件 unlink($tmpPath); // 注册过程 $count = 0; foreach($dataList as $row){ Book::insert(['title' => $row[0], 'price' => $row[1]]); $count++; } return redirect()->action('ItemsController@book')->with('flash_message', $count . '书籍已注册!'); }
操作检查
这次,我将把以下三行数据保存为 CSV 文件。(我热爱音乐。)

选择 CSV 文件并点击上传……

文件似乎已成功处理并重定向。
请检查数据库。

我们已确认以 CSV 格式写入的数据已保存到数据库中!
概括
我很高兴能够成功地将写入 CSV 文件的信息保存到数据库中。
开始之前我还有些紧张,但后来发现整个过程非常便捷,从安装库到注册数据只用了很短的时间。
当然,实际上还需要进行验证检查和异常处理,但我希望在需要注册大量数据的情况下使用它。
奖金
■ 下载 CSV 模板文件
通过添加以下方法,我能够下载 CSV 模板文件。
public function downloadCsv(): object { // 准备输出数据 $csvHeader = ["Title", "Price"]; // 设置输出数据以逗号分隔 $downloadData = implode(',', $csvHeader); // 兼容 Excel $downloadData = mb_convert_encoding($downloadData, "SJIS", "UTF-8"); // 创建一个临时 CSV 文件 if (! file_exists(storage_path('csv'))) { $bool = mkdir(storage_path('csv')); // 如果目录创建失败,则抛出异常 if (! $bool) { throw new \Exception("无法创建目录。"); } } $name = 'book.csv'; $pathToFile = storage_path('csv/' . $name); // 创建 CSV 文件 if (! file_put_contents($pathToFile, $downloadData)) { throw new \Exception("文件写入失败。"); } // 下载响应 return response()->download($pathToFile, $name)->deleteFileAfterSend(true); }
■ 编辑 CSV 文件(VS Code 插件)
我在这个项目中添加了这个功能。它让在 VS Code 中查看 CSV 文件变得更加容易。

最后
我是系统开发服务网站“SEKARAKU Lab”的成员。Beyond
提供从服务器设计、搭建到运维的一站式服务,如果您在服务器端开发方面遇到任何问题,欢迎随时联系我们。SEKARAKU
Lab: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)
今天就到这里啦!
感谢您阅读到最后!
0