[PHP] LaravelのSeeding機能を使って、初期データをデータベースに投入する
こんにちは、@yoheiMuneです。
いくつかのデータベース系のライブラリには同様の機能がありますが、Laravelにもシーディング(Seeding)という機能があり、それを使うことでデータベースへ簡単に初期データを投入することができます。今日はそれをブログに書きたいと思います。
また、
Database: Seeding - Laravel(英語、公式)
データベース:シーディング 5.5 Laravel(日本語)
最後になりますが本ブログでは、PHP、サーバー、フロントエンド、Swift、Node.js、Python、Java、Linux、インフラ、Go言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
いくつかのデータベース系のライブラリには同様の機能がありますが、Laravelにもシーディング(Seeding)という機能があり、それを使うことでデータベースへ簡単に初期データを投入することができます。今日はそれをブログに書きたいと思います。
目次
対象バージョン
Laravelの5.6を対象としていますが、5系なら同じと思います。違う部分は適宜読み替えをお願いします。シーディング(Seeding)機能とは
マイグレーション機能と同じく、データベースを管理する機能の1つです。シード機能を用いることで、簡単にデータを投入することができます。サービスリリース時に必要な初期データ(設定データや初期ユーザーデータなど)を簡単に作成&投入することができます。シードファイルの作成
シーディング機能を使うために、まずはファイルを作成します(その中に扱うデータを記入します)。Artisanコマンドで作成できます。# シード用のファイルを作成. $ php artisan make:seeder OwnersTableSeederファイル名はなんでもいいですが、対象テーブル名を含めると分かりやすいと思います。作成したファイルは
database/seeds
フォルダに保存されます。# 作成したシードファイルの保存先. database/seeds/OwnersTableSeeder.php
シードファイルの編集
作成したシードファイルの中に、投入したいデータを記述します。<?php use Illuminate\Database\Seeder; class OwnersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // ownersテーブルにインサートする. DB::table("owners")->insert([ "login_id" => "owner01", "password" => Hash::make("my-special-secret") "created_at" => new DateTime(), "updated_at" => new DateTime() ]); } }
run()
メソッドがあり、その中にLaravelの書き方で自由に記載できます。DB
クラスを使えばクエリビルダが使えるので、任意のテーブルにアクセス可能です。EloquentモデルやFactoryも使えたりと自由度が高く記述できます。詳細は後述の公式サイトを参照ください。シーディング対象に加える
デフォルトで用意されているDatabaseSeeder.php
に、上記のシードファイルの呼び出しを追加します。<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { // 追加! $this->call(OwnersTableSeeder::class); } }
$this->call()
に上記で作成したクラスを追加することで、Seedingの対象にすることができます。シーディングの実行
Composerのオートローダーを再生成するために、dump-autoload
を実行します。$ composer dump-autoloadそして、Artisanコマンドでシーディングを実行します。
# DatabaseSeeder(先ほど追記したもの)を用いて、シーディングを行う. php artisan db:seed # または、Seedingクラスを指定して実行することもできる. php artisan db:seed --class=OwnersTableSeeder
また、
--seed
オプションを付与することで、マイグレーションと一緒にも実行できます。// データベースをリフレッシュし、全データベースシードを実行 php artisan migrate:refresh --seedこれでエラーなく実行できればOKです。
参考資料
シーディングを学ぶのに、以下の記事を参照しました。ありがとうございます。Database: Seeding - Laravel(英語、公式)
データベース:シーディング 5.5 Laravel(日本語)
最後に
シーディング機能を使えば、PHPのプログラムを書いてデータ投入できるので、生のSQLを触るよりも便利です。使える技術の1つとして持っておいても損はなさそうです。最後になりますが本ブログでは、PHP、サーバー、フロントエンド、Swift、Node.js、Python、Java、Linux、インフラ、Go言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!