2018/05/23更新

[PHP] LaravelのSeeding機能を使って、初期データをデータベースに投入する

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
いくつかのデータベース系のライブラリには同様の機能がありますが、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言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSTwitterをフォローして貰えたら嬉しいです ^ ^

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。