Laravel-admin PHP プログラミング

【Laravel-admin】good/csvを利用したCSVファイルのインポート

投稿日:2019年1月9日 更新日:

こんばんは。

一月に入り一気に寒くなってきましたね。

僕の住んでいる場所は山間にあるため、朝方は超冷えます。そして霧が深いので道路&フロントがガチガチに凍ります。

いいところもいっぱいあるのですが、冬の田舎は苦手ですねぇ…

前置きはさておき、今日はLarave-adminでCSVファイルでのテーブルインポートを行ってみたいと思います。

test_usersテーブルの一覧画面は【Laravel-admin】Laravel-adminで新規テーブルを作成しCRUD画面を追加する方法で作成済みです。

Goodby/CSVのインストール

LaravelでCSVからテーブルにデータをインポートすることができるライブラリはいくつかありますが、今回はメモリ効率が非常にいいという「goodby/csv」を使用したいと思います。

参考:goodby/csv

composerを使用してインストールを行います。

上記の記述を行ったら「composer install」あるいは「composer update」を行います。

updateを行うと他のライブラリなど、新しいバージョンが存在する場合最新版を取得してしまうので、

その場合は「composer.lock」を一度削除してインストールを行います。

実装内容

一覧画面にインポートボタンを追加し、ボタン押下でCSVのデータをテーブルに挿入できるようにしたいと思います。

※一覧に表示されているデータはファクトリーで作成したダミーデータです。

 

インポート用のテーブル作成

インポート用にitemsテーブルを作成します。

マイグレーションファイル

Toolクラスを作成

インポート機能を提供するボタンを一覧画面に追加するためにToolクラスを作成します。

一覧画面のカスタムツールの作成に関しては以下のドキュメントを参考にしました。

ajaxSetupでheader情報にcsrfトークンを追加しないとデータをpost出来ないので忘れず追加しましょう。

参考:Custom tools

app/Admin/Extemsion/Tools/CsvImport.phpを以下の内容で作成します。

CsvImport.php

resource/views配下にビューを作成し、ボタン用のHTMLを記述します。

csv_upload.blade.php

 

Controller

コントローラのgrid内で、作成したToolクラスを読み込みます。

csvImport関数内でgoodby/csvを使用しCSVファイルをパースし、配列に代入後テーブルにインサートしています。

「$interpreter->unstrict();」を記述するすることで、CSVファイルの列の一貫性がない場合も無視して実行します。

CSVファイルの列の一貫性が必要な場合はコメントアウト等すれば、列の一貫性がない場合エラーとなります。

また、LexerConfigでCSVファイルの区切り文字や囲い文字、文字コードなどを指定することができます。

参考:Documentation

TestUserCpntroller.php

まとめ

今回、一覧画面のボタン追加にToolクラスを使用しました。

このToolクラスですが、コントローラで読み込むだけで、表示画面のHTMLにJavascriptを使用して様々な処理を実行できるので使い道はたくさんありそうです!

課題として、CSVのデータはとりあえずはインサートできるようになりましたが、まだまだ改善点は多く、成功時・失敗時のメッセージ表示など調べ切れておりません…

Javascriptを学習しながらUI的に見栄えのいい表示方法が見つかればまた記事にしたいと思います!

-Laravel-admin, PHP, プログラミング

関連記事

【Laravel】Laravel&Laravel-adminでの論理削除 ~ORMとDBファサード~

Laravelでは論理削除を行う機能が備わっています。 論理削除と物理削除に関しては以下に詳しく紹介されています。 参考:論理削除と物理削除とは データを削除したいけれど、後々データの復元を行う可能性 …

【Laravel-admin】リレーション関係を持ったCRUD作成(1対1、1対多、多対多)

前回、【Laravel-admin】Laravel-adminで新規テーブルを作成しCRUD画面を追加する方法でLaravel-adminでテーブルのCRUD画面を作成しました。 単一のテーブルであれ …

【SendGrid】SendGridについての概要

はじめに この記事はクラウドベースのメール配信プラットフォーム「SendGrid」について紹介します。 最終的にはLaravel上に実装して、Webシステムから送信を行えるようにする予定ですが、 まず …

【SendGrid】SendGridでトランザクションテンプレート作成

はじめに 前回SendGridに登録を行いAPIKeyの作成を行いました。 関連記事:【SendGrid】SendGridについての概要 この記事ではSenGridのトランザクションメールのテンプレー …

【VirtualBox】スナップショットの作成・適用・削除

業務では主にHyper-Vを使用しているのですが、「チェックポイント」という機能がとても便利で重宝しています。 機能の概要は、稼働している仮想環境を「チェックポイント」として保存することができ、作成し …