Help us understand the problem. What is going on with this article?

Laravelでシーダーを使う

More than 3 years have passed since last update.

テストデータをまとめていれたいときとかに。

シーダーファイルを作る

$ php artisan make:seeder PhotoTableSeeder

database/seedsにシーダー用のクラスができる。
その中にのrunメソッドにデータの流し込みなどの記述をする。

PhotoTableSeeder.php
<?php

use Illuminate\Database\Seeder;

class PhotoTableSeeder extends Seeder {

    public function run() {
        $authors = ['田中太郎','山田太郎','佐藤太郎'];
        foreach ($authors as $author) {
            DB::table('author')->insert('author')
        }
    }
}

とりあえず実行されているかを確認したいだけであれば print("テスト")とかもアリ。

Lumenの場合

make:seeder コマンドがないので、自分で作る。
新しいクラスを使ったら composer dump-autoload を忘れずに。
(コマンドがあるLaravelではオートロードまでを勝手にしてくれるらしい)

callメソッドでシーダーファイルを呼び出す

作ったシーダーファイルをDatabaseSeeder.phpから呼び出す。
このファイルはデフォルトで用意されている。

DatabaseSeeder.php
<?php

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {

        // 各テーブルへのデータの流し込みを呼び出す
        $this->call('PhotoTableSeeder::class');
    }
}

追記:シーダー実行時のオプション

オプションで--classを使えば特定のシーダーだけ実行される。

$ php artisan db:seed --class=PhotoTableSeeder

シーダー実行

$ php artisan db:seed

DatabaseSeeder.php内のrunメソッド が実行される。

シーダーをマイグレーションごと巻き戻したいとき

$ php artisan migrate:refresh --seed

毎回全データをクリアしてからシーダーを実行する

runメソッドの最初に データのクリアの処理 を記述するとよい。

クエリビルダを使った場合

PhotoTableSeeder.php
public function run() {
    // データのクリア
    DB::table('author')->truncate();

    // データ挿入
        ・・・・・・
}

DBファザードを使った場合

PhotoTableSeeder.php
public function run() {
    // データのクリア
    \Illuminate\Support\Facades\DB::table('author')->truncate();

    // データ挿入
        ・・・・・・
}
shosho
Qiitaには忘れそうなこと、勉強したことをメモしてます。
https://shosho-egg.hateblo.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした