Laravelの基本はこちらから学べます

Laravelでダミーデータを挿入する(データ生成)。




こんにちは。Tです(ベトナムの学校でこう呼ばれていました)。

今回はLaravelにダミーデータをいれる方法を学んでいきます。
具体的には「Seeder」と「Factory」を学んでいきます。

Seeder(シーダ)

シーダ(初期値設定)クラスを使用し、テストデーターをデーターベースに設定するシンプルな方法もLaravelには備わっています。

Laravelドキュメント 6.× データベース:シーディング https://readouble.com/laravel/6.x/ja/seeding.html

噛み砕くと、LaravelにはすでにダミーデータをDBにいれる機能を持っているということです。
今回はuserを作成しましょう。

Userをseedしてみる

php artisan make:seeder UsersTableSeeder

database/seeds/UsersTableSeeder.php
が作成されました。中身に追記していきましょう。

<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => 'aburasoba',
            'email' => 'hoge@hoge.com',
            'password' => Hash::make('testtest'),
        ]);
    }
}

usersテーブルのnameカラム、emailカラム、passwordカラムにそれぞれ
「aburasoba」「hoge@hoge.com」「testtest」というレコードを追加します。

ここで出てくる「Hash」でパスワードをハッシュ化しています。

ハッシュ化とは、元のデータから一定の計算手順に従ってハッシュ値と呼ばれる規則性のない固定長の値を求め、その値によって元のデータを置き換えること。パスワードの保管などでよく用いられる手法である。

IT用語辞典 http://e-words.jp/w/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%8C%96.html

次に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);
    }
}

runメソッドの中身のコメントアウトを外しましょう。これで準備完了です。

ターミナルでseedを実行しましょう。

% php artisan db:seed

以下の表示になったら成功です。

Seeding: UsersTableSeeder
Seeded:  UsersTableSeeder (0.08 seconds)
Database seeding completed successfully.

実際にアプリケーションでログインしてみましょう!
いかがだったでしょうか。Seederを使うことでダミーデータを挿入することができましたね。

postをseedしてみる

大きな流れは一緒です。

% php artisan make:seeder PostsTableSeeder

database/seeds/PostsTableSeeder.php
が作成されました。

<?php

use Illuminate\Database\Seeder;

class PostsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('posts')->insert([
            'title'   => '初めての投稿',
            'body'    => '楽しいLaravel',
            'user_id' =>  1,
        ]);
    }
}

さて、私は上記のように書きました。

ここで問題となるのがuser_idです。実際に存在するusersのidを記入しないとエラーが出てしまうので注意してください。

では、実際に存在するのかどうかを確認してみましょう。

mysqlで確認します。

% msyql -u root -proot

% use blog

% select * from users;

1行目:mysqlにログイン
2行目:使用するデータベースを指定
3行目:usersテーブルのデータを全て表示

上記コマンドを打つことで、usersのデータをみることができます。
idカラムを確認して、存在するuserのidをチェックすることができます。

それでは続きに戻ります。

次に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(PostsTableSeeder::class);
    }
}

ここで注意。UsersTableSeederについてはコメントアウトしましょう。というのもこちらをコメントアウトせずにseedを行うと、再度UsersTableSeederが働き、先ほど作成したユーザーがまた作られてしまうからです。

% php artisan db:seed

どうでしょうか。うまくいったでしょうか。
アプリの一覧ページを確認して今作成した投稿が表示されているかを確認しましょう。

私は大成功

大量のダミーデータを作成、保存したい。FactoryとFaker。

投稿をダミーでたくさん表示させたい。こんなことを思った方いらっしゃるのではないでしょうか。
もちろん先ほどのSeedでデータをたくさん手入力して作成することもできます。

面倒ですよね。

そこでFactoryとFakerを使いましょう。

FakerとFactory

database/factories/UserFactory.phpを確認しましょう。実はすでにUserに関してはFactoryが用意されています。
こちらを活用して、userのダミーデータを作成しましょう。

database/seeds/UsersTableSeeder.php

<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
use App\User;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(User::class, 10)->create();
    }
}

先ほど記入していた中身の代わりに、factoryを使用するように書き換えました。

次に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);
    }
}

ターミナルでseedを実行しましょう。

% php artisan db:seed

いかがでしょうか。
先ほどのように、mysqlの中身をターミナルから確認していきましょう。

% mysql -u root -proot
% use blog
% select * from users;

外国の方のレコードが10件増えました。

Fakerで生成されるデータを日本語にする

config/app.php

// 'faker_locale' => 'en_US', の代わりに
'faker_locale' => 'ja_JP', こちらに変更

に変更します。configを変更したのでキャッシュをクリアしましょう

% php artisan config:cache

もう一度seedをしてみましょう。

% php artisan db:seed

こうすることで、日本人の方のダミーデータを保存することができます。

いかがだったでしょうか。今回はダミーデータを挿入する方法について学んでいきました。
初心者の方はまずはSeederを抑えることから始めましょう!

お疲れ様でした。




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です