見出し画像

LaravelでTSV(CSV)ファイルを扱う

LaravelでTSVファイルからデータベースに初期データを投入したく、自分が分からなかった点をまとめます😊

TSVファイルをどこに置くか

Laravelのdatabaseディレクトリ配下に置くと良さそう。

ヘルパのdatabase_path()を使うとdatabaseディレクトリの完全パスが生成されます。

// database/
$path = database_path();
// database/service/users.tsv
$path = database_path('service/users.tsv');

ファイルを扱う時に使うPHP構文

LaravelではなくPHP構文の紹介です。TSVを読み込み、データベースに保存しやすいような配列にしていきます。

■ファイルまたはディレクトリが存在するかどうか調べる

$path = database_path('service/users.tsv');
// ファイルがあればtrue
$fileExists = file_exists($path);

■TSVから行を取り出し、配列を生成する

use \SplFileObject;

$file = new SplFileObject($path);

PHPで操作できるようTSVパスから配列にします。これで変数$fileからフィールドごと値が取り出せるようになります。

■TSVの行の配列を生成

ちなみにこんなTSVファイルを用意しています。

スクリーンショット 2020-04-05 13.00.08

$file = new SplFileObject($path);
$headField = $file->fgetcsv("\t", '"');

これで先頭行の配列が取得できます。

スクリーンショット 2020-04-05 13.05.21

nextすることで次の行を取り出せます。

$file->next();
$field = $file->fgetcsv("\t", '"');

スクリーンショット 2020-04-05 13.06.56

ループ処理を書き、最後の行を読み込むまでnextしてあげると全データが取得できます。

TSVのデータをデータベースに保存する

最終的に取り出したデータを多次元の連想配列にします。

$users = array(
   array( "name" => "山田太郎", "age" => 17 ),
   array( "name" => "山田花子", "age" => 23 ),
   array( "name" => "山田一郎", "age" => 51 )
);

foreach ($users as $user) {
   DB::table('users')->insert($user);
}

LaravelのSeeder機能を使って、データベースに保存することでTSVから初期データを用意できます。

🎉🎉🎉

Laravelをもっと詳しく知りたい方はこちらの本がわかりやすいです。



この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
note.user.nickname || note.user.urlname

息抜きのコーヒー代にさせて頂きます!!♡

ありがとうございます〜!
5
フロントエンドエンジニアです。歴2年弱 勉強したことをつらるページ₍ ᐢ. ̫ .ᐢ ₎ たまにもくもく会やったり→https://prog-9.connpass.com/ 趣味はお笑いラジオと西洋音楽と西洋美術👩‍🎨

こちらでもピックアップされています

アウトプット
アウトプット
  • 505本

ゆめみの【勉強し放題制度】を活用したアウトプット、その他に、メンバーが自分自身で学んだことをまとめています。 ゆめみの独自制度である「勉強し放題制度」は、あらゆる学習費用を100%会社が負担します。書籍、社外セミナー、実験機材、認定資格の受験など、成長のためのコストは会社が全て負担。また、業務時間の10%は自由な活動に使うことができます。

コメントを投稿するには、 ログイン または 会員登録 をする必要があります。