Laravelでシーディングしてみる

現状、下記のテーブルがある状態。

CREATE TABLE `books` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100),
  `price` int(11),
  PRIMARY KEY (`id`)
);

シーダーの作成

シーダーのファイルを作成。

$ php artisan make:seeder BooksTableSeeder

下記のファイルができた。

$ cat database/seeds/BooksTableSeeder.php
<?php

use Illuminate\Database\Seeder;

class BooksTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}

下記のように修正。

$ vi database/seeds/BooksTableSeeder.php
・・・
    public function run()
    {
        DB::table('books')->insert([
            ['name' => 'aaa', 'price' => 100],
            ['name' => 'bbb', 'price' => 200],
            ['name' => 'ccc', 'price' => 300],
        ]);
    }
・・・

クラス名を指定して実行

クラス名を指定して、シーディングを実行。

$ php artisan db:seed --class=BooksTableSeeder

入った。

$ mysql -u root laravel -e 'SELECT * FROM books'
+----+------+-------+
| id | name | price |
+----+------+-------+
|  1 | aaa  |   100 |
|  2 | bbb  |   200 |
|  3 | ccc  |   300 |
+----+------+-------+

もう一回実行してみる。

$ php artisan db:seed --class=BooksTableSeeder

さらに追加された。

$ mysql -u root laravel -e 'SELECT * FROM books'
+----+------+-------+
| id | name | price |
+----+------+-------+
|  1 | aaa  |   100 |
|  2 | bbb  |   200 |
|  3 | ccc  |   300 |
|  4 | aaa  |   100 |
|  5 | bbb  |   200 |
|  6 | ccc  |   300 |
+----+------+-------+

クラス名を指定せず実行

下記のファイルを、

$ cat database/seeds/DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        // $this->call(UserSeeder::class);
    }
}

下記のように修正し、

$ vi database/seeds/DatabaseSeeder.php
・・・
    public function run()
    {
        $this->call([
          BooksTableSeeder::class,
        ]);
    }
・・・

クラス名を指定せず実行。

$ php artisan db:seed

入った。

$ mysql -u root laravel -e 'SELECT * FROM books'
+----+------+-------+
| id | name | price |
+----+------+-------+
|  1 | aaa  |   100 |
|  2 | bbb  |   200 |
|  3 | ccc  |   300 |
|  4 | aaa  |   100 |
|  5 | bbb  |   200 |
|  6 | ccc  |   300 |
|  7 | aaa  |   100 |
|  8 | bbb  |   200 |
|  9 | ccc  |   300 |
+----+------+-------+

ただ、公式のドキュメントによると
https://readouble.com/laravel/7.x/ja/seeding.html

dump-autoloadというものも実行しておく必要があるみたい。

$ composer dump-autoload