0
0

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.

【Laravel6】Seederで一度に複数テーブルへダミーデータ投入

Last updated at Posted at 2021-09-27

バージョン:Laravel 6.20.32

FactoryとSeederを使って一度に複数テーブルにダミーデータを投入する。
Factoryでfakerを使ってランダムにダミーデータ生成、Seederでそれを実行。
さらにそれをDatabaseSeederでループして実行。

ordersテーブルとorders_detailsテーブルの2つのテーブルに対して、一度にダミーデータを入れてみる。

FactoryとSeederの用意

ordersテーブル

OrderFactory.php

<?php

/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\Models\Order;
use Faker\Generator as Faker;

$factory->define(Order::class, function (Faker $faker) {
    return [
        'order_name01' => $faker->lastName,
        'order_name02' => $faker->firstName,
        ...
    ];
});

OrderSeeder.php

<?php

use Illuminate\Database\Seeder;

class OrderSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(App\Models\Order::class, 1)->create();
    }
}

order_detailsテーブル

OrderDetailFactory.php

<?php

/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\Models\OrderDetail;
use App\Models\Order;
use Faker\Generator as Faker;

$factory->define(OrderDetail::class, function (Faker $faker) {
    return [
        'order_id' => Order::max('id'), // ordersテーブルのidの最大値
        'product_id' => $faker->numberBetween(1,5),
        ...
    ];
});

OrderDetailSeeder.php

<?php

use Illuminate\Database\Seeder;

class OrderDetailSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(App\Models\OrderDetail::class, 2)->create();
    }
}

OrderDetailSeeder.phpに関しては2回実行としているので、ordersテーブルの1レコードあたり、order_detailsテーブルには2レコード作成される。

DatabaseSeeder.phpの記述

DatabaseSeederにて、makeOrderというメソッドを作り、それを50回実行するようにする。
makeOrderメソッドでは、OrdesSeederとOrderDetailSeederを呼び出す。
結果、ordersテーブルには50レコード、order_detailsテーブルには100レコード作成される。

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{

    /**
     * Seed the order relation database.
     *
     * @return void
     */
    public function makeOrder(int $count){
        for ($i = 0; $i < $count; $i++){
            $this->call([
                OrderSeeder::class,
                OrderDetailSeeder::class,
            ]);
        }
        return;
    }

    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->makeOrder(50);
    }
}

Seederの実行

artisanコマンドでDatabaseSeederを実行。

php artisan db:seed
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?