プログラミング学習中

【41歳学習中_SAMURAI TERAKOYA】Laravelの基礎を学ぼう#20-21日目

前回のリレーションシップは難しかった…

今回はテストデータの作成方法を学びました!

この記事はおじさんの勉強メモである

記憶すること!

忘れてはいけないMVCで使用するフォルダとファイル
■ルート
routes\web.php

■コントローラー
app\Http\Controllers\○○○.php

■ビュー
resources\views\○○○.blade.php

■モデル
app\Models\○○○.php

■マイグレーション
database\migrations\〇〇〇〇〇〇〇_〇〇_create_products_table.php

■シーダー(ダミーデータ作成)
database\seeders

19章 シーディングとファクトリについて学ぼう

シーディング

Laravelの機能でデータベースのテーブルにテストデータ(ダミーデータ)を追加できる。
seedの「種をまく」から由来されてる。

シーディングの使い方

コマンドでシーダークラスを作成する。

php artisan make:seeder シーダークラス名

既存のusersテーブルのシーダークラスを作成してみました

php artisan make:seeder userSeeder

database/seedersフォルダの中に「userSeeder.php」ができました。中身は以下の通り。

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class userSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        //
    }
}

今回はエロの力を使いたかったのでEloquent ORMでデータを追加したいと思います。

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class userSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $user = new User([
            'name' => 'ヤミラミ'
            'email' => "yamirami@pole.com"
            'email_verified_at' => 'この項目なんだろう'
            'password' => 
            'remember_token' => '覚えててくれよ'
        ]);
        $user->save();
    }
}

以下のコマンドでシーディングを実行

★基本コマンド
php artisan db:seed --class=シーダークラス名

★今回実行したコマンド
php artisan db:seed --class=userSeeder

む、エラーが…

newのスペルがちがうじゃねぇか!
あと連想配列後のカンマがないぞ!

以下のように修正した。

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class userSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $user = new User([
            'name' => 'ヤミラミ',
            'email' => "yamirami@pole.com",
            'email_verified_at' => 'この項目なんだろう',
            'password' => 'yamirami',
            'remember_token' => '覚えててくれよ'
        ]);
        $user->save();
    }
}

む、まだエラーが…

★Userクラスがないということでハイライトのところを変更
<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\User;

更にエラーが…

★「Unexpected character」文字は期待してない!とあるので、phpMyAdminを確認したところ、timestampの項目だったのでseedersで値を指定していた箇所を削除

ふぅ、エラー解消♪
ヤミラミが登録された

ファクトリ

ファクトリ(Factory)とは、ダミーデータ(テストデータ)を簡単に生成できるLaravelの機能。
「ダミーデータを生成する工場(Factory)」という感じ。

ダミーデータを作るだけならシーディングと同じじゃん♪

シーダークラス内でもダミーデータは生成できる。
ファクトリを利用すれば各カラム(氏名や住所など)にランダムな値をセットすることもできるので、より簡単に大量のダミーデータを生成できる。

ファクトリは大量のダミーデータを作成したいとき、
シーディングは境界値などのデータを指定したテストのときに使用するんだな♪

ファクトリの使い方

★コマンド
php artisan make:factory ファクトリ名

★実際に使用したコマンド
php artisan make:factory UserFactory
【シーダーズを編集する】
<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\User;

class userSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        // ★ファクトリ★
        // UserFactoryクラスで定義した内容にもとづいてダミーデータを生成し、usersテーブルに追加する
        User::factory()->create();

    }
}
★ファクトリで作成するデータの個数を指定する場合、count(10)など数を入れて指定する
        User::factory()->count(10)->create();
★コマンドを実行
php artisan db:seed --class=userSeeder

たくさんのデータが簡単に出来た!スゴイ♪

Fakerのランダムの値を日本語化する方法

★config/app.php
    /*
    |--------------------------------------------------------------------------
    | Faker Locale
    |--------------------------------------------------------------------------
    |
    | This locale will be used by the Faker PHP library when generating fake
    | data for your database seeds. For example, this will be used to get
    | localized telephone numbers, street address information and more.
    |
    */

    'faker_locale' => 'ja_JP',

感想

シーディング、ファクトリは素晴らしい!
今まではテストデータをExcelでcsvを作成して、インポートしてたけどファクトリで簡単に大量のデータを作成できた。
シーディングは境界値テストなどで使用したいと思います!

  • この記事は東京在住の若干雨キャンパーが書きました

ame-sun

1982年生まれ東京都板橋区在住。

キャンプの日は雨が多い気がする。
あ、長男が2014年の大雪の日に生まれてからかも…
お宮参り、お食い初め、GWの旅行、ディズニーランドも…
キャンプ場に到着すると雨が降ってくる…

でも、運命だ。私は若干雨キャンパーでいく!

2021年からブログを始め、細く長く楽しみながら書いていきます。
どうぞ宜しくお願い致します( ̄へ ̄;)ゞ

■こんなブログです
キャンプ場+@(景色、温泉、川遊びなど)の紹介
キャンプ場リスト
高速IC(インターチェンジ)の周辺情報
 (同じIC周辺を都度調べてたので記事にしてみました♪)
キャンプ道具の紹介
子供と行ける遊び場の紹介 など

■キャンプ回数
 2022年 11回

※Amazonのアソシエイトとして、当メディアは適格販売により収入を得ています。

-プログラミング学習中