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