【面向初学者】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 模板文件

通过添加以下方法,我能够下载 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 文件变得更加容易。
编辑 CSV 文件

编辑 CSV 市场

最后

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

今天就到这里啦!
感谢您阅读到最后!

如果您觉得这篇文章有用,请点击【点赞】!
0
加载中...
0票,平均分:0.00/10
17,456
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

福井宏人

他于2020年6月加入Beyond,在系统开发部(横滨办公室)工作。他
的工作主要使用PHP,负责开发游戏API和Web系统,以及开发私有的Shopify应用。
他热爱音乐,尤其喜欢西方音乐,业余爱好是弹吉他。他最喜欢的电视剧是《侦探!夜探》和《广告街天堂》。