現役フリーランスエンジニアが運営するテックメディア。日々の業務で得た知識を発信していきます!

  1. バックエンド
  2. 2095 view

Laravelのシーティング(Seeding)機能をマスターしよう!

最終更新日:2019/04/02

本記事では、Laravelのシーディング(Seeding)機能の使い方をわかりやすく解説していきます。

以下の記事の続きです。まだ読んでいない方はぜひご一読ください!

初心者の方でもLaravelの動作環境を簡単に作れるWINDIIオリジナルのソースコードを用意したので、実際に動かして学ぶとより深く理解できるようになります!

以下の記事を参考にご活用ください。

Laravelのシーディング(Seeding)機能ってなに?

シード(Seed)という英語は、種をまくという意味です。
Laravelのシードとは、テストデータをデーターベースに入れることです。テストデータをまくということですね。
実際のアプリケーション開発では、大量のデータが必要になることも少なくないです。その時に、いちいち手でデータを一つづつ作っていくのは骨が折れます。そこで、Laravelのシーディングという機能を使って一気にデータを入れてしまおうというわけです。

それでは、さっそくシーディングを使っていきましょう!

シーダクラスを作成する

今回は、usersテーブルとarticlesテーブルにテストデータを入れるのをゴールにしましょう。

以下のコマンドでusersテーブルにデータを挿入するシーダクラスを作成します。

php artisan make:seeder UsersTableSeeder

実行すると、database/seeds/UsersTableSeeder.phpが作成されます。

以下のようにrun()メソッドに50人のユーザを作る処理を記述します。

<?php

use Illuminate\Database\Seeder;
use Carbon\Carbon;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        for($i=1;$i <= 50;$i++) {
            DB::table('users')->insert([
                'name' => "テストユーザ{$i}",
                'email' => "test{$i}@example.com",
                'password' => bcrypt('secret'),
                'created_at' => Carbon::now(),
                'updated_at' => Carbon::now(),
            ]);
        }
    }
}


書き上げたらdatabase/seeds/DatabaseSeeder.phpを開いてrun()メソッドに以下を追加しましょう。

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        // 追加
        $this->call(UsersTableSeeder::class);
    }
}

同様にarticlesテーブルへのシーダクラスも作成します。

php artisan make:seeder PostsTableSeeder

database/seeds/ArticlesTableSeeder.phpを開いて以下のようにします。

<?php

use Illuminate\Database\Seeder;
use Carbon\Carbon;

class ArticlesTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        for($i=1;$i <= 50;$i++) {
            DB::table('articles')->insert([
                'title' => "テストタイトル{$i}",
                'content' => "本文{$i}",
                'user_id' => mt_rand(1, 50),
                'created_at' => Carbon::now(),
                'updated_at' => Carbon::now(),
            ]);
        }
    }
}

書き上げたらdatabase/seeds/DatabaseSeeder.phpを開いてrun()メソッドに以下を追加しましょう。

database/seeds/DatabaseSeeder.php

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UsersTableSeeder::class);
         // 追加
        $this->call(ArticlesTableSeeder::class);
    }
}

シーダを実行する

それでは、先ほど作成したシーダを実行しましょう。まずは先ほど作成したシーだクラスを読み込むために以下のコマンドを実行します。

composer dump-autoload

実行できたら、以下のコマンドでシーダを実行します。

php artisan db:seed

実行できたら、データベース(localhost:8080)をみてみましょう!

以下のような感じでデータが大量に保存されているはずです。

ちなみに、以下のコマンドでデータベースの再生成とシーディングをすることができます。

php artisan migrate:refresh --seed

まとめ

以上、シーディングの使い方でした。シーディングをちゃんと定義しておくと、チームに新しく入ってきた人がすぐに開発に取りかかれるので、チームの生産性が非常に高まります!
ぜひマスターしてください。

次回は認可について解説します!

The following two tabs change content below.
WINDII

WINDII

WINDII(ウィンディ)は、フリーランスエンジニアが運営するテックメディアです。 日々の業務で得た知見を、皆さんに役立つコンテンツにして発信していくので応援よろしくお願いします! また、Slackで無料コミュニティも運営しています。たくさんのエンジニアが参加していて、プログラミングの相談や雑談などをしている楽しいコミュニティなので、興味ある方はぜひお気軽にご参加ください。 Slackコミュニティはこちらから

バックエンドの最近記事

  1. 人気急上昇中のLaravelをはじめよう!【徹底解説】

  2. Laravelの認可を理解して実装してみよう!

  3. Laravelのシーティング(Seeding)機能をマスターしよう!

  4. Laravelのメール確認機能を設定してみよう!

  5. Laravelの認証機能を設定してみよう!

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP