[对于初学者] 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'); $表->时间戳() });
这是我准备的视图。
(是的,很简单!抱歉!)
准备好路由、CSV导入方法和模型后,下一步是安装Goodby CSV库。
安装 Goodby CSV 库
运行以下命令来安装 Goodby CSV 库。
作曲家需要再见/csv
等到它完成。
安装完成后,按照 Goodby CSV 的 GitHub 上的 README 操作,并将以下使用声明添加到相关控制器中。
再见 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(); //TMP 文件名 $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数组赋值作为新的Observer $interpreter-> addObserver( function (array $row) use (&$dataList){ // 获取每列的数据 $dataList[] = $row; // 解析 CSV 数据 $lexer->parse($tmpPath, $terpreter); / 删除 TMP 文件 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 写入的数据已保存在 DB 中!
概括
我很高兴能够成功地将写入 CSV 的信息保存在数据库中。
开始工作之前我有点犹豫,但我发现它非常方便,从安装库到注册的所有事情都可以在相对较短的时间内完成。
实际上,验证检查和异常处理是必要的,但我想根据情况使用它,例如当我想要注册大量数据时。
奖金
■ 下载CSV 模板文件
通过添加以下方法,我能够下载 CSV 模板文件。
public function downloadCsv(): object { // 准备输出数据 $csvHeader = ["Title", "Price"]; // 设置以逗号分隔的输出数据 $downloadData = implode(',', $csvHeader); // 兼容with 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' ; ('csv/' . $name); // 创建 CSV 文件 if (! file_put_contents($pathToFile, $downloadData)) { throw new \Exception("无法写入文件。") } // 下载响应 return response( )->下载($pathToFile, $name)->deleteFileAfterSend(true);
■ 编辑csv(VScode插件)
我借此机会补充一下。它使得 CSV 非常容易在 VScode 上查看。
最后
我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)
这次就这样了!
感谢您阅读到最后!