Laravel8 시더, 모델 팩토리 배열에서 속성을 덮어쓰고 테스트 데이터 만들기
소개
Laravel8의 시더, 모델 팩토리로 배열을 사용해 속성을 덧쓰기해 테스트 데이터를 작성하는 tips입니다.
환경
준비
아래 모델과 모델 팩토리가 있다고 가정하여 시더를 만듭니다.
마이그레이션
database/migrations/1970_01_01_000001_create_companies_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCompaniesTable extends Migration
{
public function up()
{
Schema::create('companies', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->integer('capital');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('companies');
}
}
모델
app/Models/Company.php
<?php declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Company extends Model
{
use HasFactory;
protected $guarded = [
'id',
'created_at',
'updated_at',
];
protected $casts = [
'name' => 'string',
'capital' => 'int',
];
}
모델 팩토리
database/factories/CompanyFactory.php
<?php declare(strict_types=1);
namespace Database\Factories;
use App\Models\Company;
use Illuminate\Database\Eloquent\Factories\Factory;
class CompanyFactory extends Factory
{
protected $model = Company::class;
public function definition()
{
return [
'name' => $this->faker->company,
'capital' => (int) round($this->faker->numberBetween(1000, 10000), -2),
];
}
}
시더
database/seeders/CompaniesTableSeeder.php
<?php declare(strict_types=1);
namespace Database\Seeders;
use App\Models\Company;
use Illuminate\Database\Eloquent\Factories\Sequence;
use Illuminate\Database\Seeder;
class CompaniesTableSeeder extends Seeder
{
public function run()
{
// 全件削除
Company::truncate();
// 1件データを作る
Company::factory()->create();
// 5件データを作る
Company::factory(5)->create();
// 5件データを作る(countでも良い)
Company::factory()->count(5)->create();
// capital(資本金)が5000のデータ5件を作る
Company::factory(5)->create(['capital' => 5000]);
// name(会社名)を指定したデータ5件を作る
$companies = [
['name' => '株式会社A'],
['name' => '株式会社B'],
['name' => '株式会社C'],
['name' => '株式会社D'],
['name' => '株式会社E'],
];
Company::factory(count($companies))
->state(new Sequence(...$companies))
->create();
// capital(資本金)が1000,5000を交互に入れるデータ5件を作る
Company::factory(count($companies))
->state(new Sequence(
['capital' => 1000],
['capital' => 5000]
))
->create();
}
}
DB 내용
위의 시더를 실행하면 이러한 데이터가 생성됩니다.
연속적인 데이터를 만드는 경우는
Illuminate\Database\Eloquent\Factories\Sequence
를 사용하면 깨끗이 쓸 수 있습니다.꼭 사용합시다!
관련 기사
참고
Reference
이 문제에 관하여(Laravel8 시더, 모델 팩토리 배열에서 속성을 덮어쓰고 테스트 데이터 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ucan-lab/items/ddec1f2ec85901006bdd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)