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未満の方は表記が異なるので、注意してください。
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;//seederクラスを引き継いでいる
class BlogsTableSeeder extends Seeder//seederから継承してBlogsTableSeederを作る
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()//データベースに追加する処理をこの中に書く
{
}
}
<?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行目あたりに)
use App\Models\Blog;
4.configのapp.phpでFaker
の設定を日本語にしてあげる
'faker_locale' => 'ja_JP',
5.Factoryファイルの編集
使いたいモデルを指定してあげる
use App\Models\Blog;
protected $model = \App\Models\Blog::class;
return
の中にテストデータを記述する。追加したいデータの一覧はこちら
'title' => $this->faker->word,//titleというカラムにword型のデータを入れる
'content' => $this->faker->realText//contentにrealText型のデータを入れる
6.Seederファイルで使いたいFactoryを指定
public function run()
{
\App\Models\Blog::factory()->count(15)->create();
// モデル名 作成したい数
}
7.DatabaseSeeder.phpにBlogTableSeeder.phpを定義してあげる
$this->call
(BlogsTableSeeder::Class);
8.ターミナルでcofigを読み込む
$ php artisan config:clear
9.DBに読み込む
$ php artisan db:seed
#Laravelバージョン8未満との比較
$factory->define(Model::class,function (Faker $faker){
(Faker $faker) {
return [
'title' =>$faker->word,
'content' =>$faker->realText
];
});
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
];
}
public function run()
{
factory(Blog::class, 15)->create();
}
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