17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel8 テストデータ

Last updated at Posted at 2020-09-30

Laravelバージョン8のテストをFactoryとSeederを使って行っていきます。また、Laravelバージョン8はこれまでと記述の仕方が異なるので注意してください。
#Seeder
・SeederはLaravelのクラスの一つになる。(Illuminate/Database/Seeder)
・Seederを使うことによってテストデータを簡単にデータベースに設定できる。
・artisanコマンドで生成・実行できる
・seederファイルを編集していく
・作成したseederをDatabaseDatabaseSeederファイルに登録して呼び出す

#Factory
・ElquentElquentモデルを使って、テストデータを作る時に便利な機能(使わなくてもできる)
・ElquentElquentモデルを自動でデフォルト値を設定できる
・1つの定義をしていれば複数のデータを一括で作成できる
・artisanコマンドで作成できる
Faker PHPライブラリを使う

#流れ
(使うモデルはBlog.php)
1.Seederを生成(database/seeders/ファイル名)

$ php artisan make:seeder BlogsTableSeeder

2.Factotyの生成(database/factories/ファイル名)

$ php artisan make:factory BlogFactory

作成されたファイルが下の二つのファイルです。
また、後で紹介しますが、Laravelバージョン8未満の方は表記が異なるので、注意してください。

database/seeders/BlogsTableSeeder.php
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;//seederクラスを引き継いでいる


class BlogsTableSeeder extends Seeder//seederから継承してBlogsTableSeederを作る
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()//データベースに追加する処理をこの中に書く
    {
        
    }
}

database/factories/BlogFactory.php
<?php

namespace Database\Factories;

use App\Models\Blog;//使いたいモデル
use Illuminate\Database\Eloquent\Factories\Factory;

class BlogFactory extends Factory//
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Model::class;//モデル名をパスから指定

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [//追加したいデータを中に記述
            //
            
        ];
    }
}

3.Seederファイルで使いたいモデルを指定する(6行目あたりに)

database/seeders/BlogsTableSeeder.php
use App\Models\Blog;

4.configのapp.phpでFakerの設定を日本語にしてあげる

config/app.php/109行目
'faker_locale' => 'ja_JP',

5.Factoryファイルの編集
使いたいモデルを指定してあげる

database/factories/BlogFactory.php(3行目あたりに)
use App\Models\Blog;
database/factories/BlogFactory.php(15行目あたりに)
protected $model = \App\Models\Blog::class;

returnの中にテストデータを記述する。追加したいデータの一覧はこちら

database/factories/BlogFactory.php
'title' => $this->faker->word,//titleというカラムにword型のデータを入れる
'content' => $this->faker->realText//contentにrealText型のデータを入れる

6.Seederファイルで使いたいFactoryを指定

database/seeders/BlogTableSeeder.php
public function run()
    {
        \App\Models\Blog::factory()->count(15)->create();
      //    モデル名            作成したい数
    }

7.DatabaseSeeder.phpにBlogTableSeeder.phpを定義してあげる

database/seeders/DatabaseSeeder.php
$this->call
(BlogsTableSeeder::Class);

8.ターミナルでcofigを読み込む

$ php artisan config:clear

9.DBに読み込む

$ php artisan db:seed

下記のようにDBを確認して情報が入っていれば成功です。
image.png

#Laravelバージョン8未満との比較

Factory.php(旧)
$factory->define(Model::class,function (Faker $faker){
 (Faker $faker) {
   return [
           'title' =>$faker->word,
           'content' =>$faker->realText       
   ];
});
Factory.php(新)
protected $model = \App\Models\Blog::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            //
            'title' => $this->faker->word,
            'content' => $this->faker->realText
        ];
    }
Seeder.php(旧)
public function run()
{
  factory(Blog::class, 15)->create();
}
Seeder.php(新)
public function run()
{
 \App\Models\Blog::factory()->count(15)->create(); 
}

#終わり
参考サイト
https://qiita.com/tosite0345/items/1d47961947a6770053af
https://qiita.com/ntm718/items/47cb81b5bce4c428e8cc
https://www.youtube.com/watch?v=xOtnux8XRdk
https://stackoverflow.com/questions/63816395/laravel-call-to-undefined-function-database-seeders-factory

17
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?