暇なときに予定を探せるアプリyoteiPickerをリリースしました。
この記事では、実際の実務で使っている方法でLaravelのseederを使って、データを投入する流れを説明します。
【開発環境】
Docker 20.10.7
PHP 7.4.22
Laravel 8.53.1
mySQL 5.7
データベースのツール phpmyadmin
##seederとは
seederとは日本語に訳すと「種をまく」となります。つまり、データにタネをまく=データを投入すると言い換えられます。
開発現場では、開発中にいちいちデータベースを操作してデータを1件ずつ投入するのは面倒です。
シーダーを使えば、事前に定義しておいたダミーデータをコマンド一発でデータベースに投入できます。
##実際の流れ
##実際にseederを活用してデータベースにダミーデータを投入する
今回は、本を管理するアプリを想定します。
ダミーデータとして、users,books,categoriesテーブルにデータを投入します。
$ php artisan make:seeder initBooksSeeder
database>seeders>initBooksSeederが作成されます。
試しにusersのダミーデータを投入してみましょう。
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB; //追加
use Illuminate\Support\Str; //追加
use Illuminate\Support\Facades\Hash; //追加
class initBooksSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'user_name' => Str::random(10),
'email' => Str::random(10).'@gmail.com',
'password' => Hash::make('password'),
]);
}
}
編集できたら、以下を実行してダミーデータを投入する。
$ php artisan db:seed --class=initBooksSeeder
データベースを確認すると、データが1件登録されているのが確認できますね。
usersテーブルにデータが登録できることがわかったので、users,books,categoriesテーブルにデータを投入していきましょう。
以下のコマンドを実行すると、すべてのテーブルが削除され、すべてのマイグレーションが再実行されます。このコマンドは、データベースを完全に再構築するのに役立ちます。
$ php artisan migrate:fresh --seed
これでデータベースのデータは綺麗さっぱりなくなり、テーブルには何もデータがない状態にできました。
users,categories,bookテーブルにデータを3件ずつ投入するように私は実装してみました。
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB; //追加
use Illuminate\Support\Str; //追加
use Illuminate\Support\Facades\Hash; //追加
class initBooksSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
[
'user_name' => Str::random(10),
'email' => Str::random(10).'@gmail.com',
'password' => Hash::make('password'),
],
[
'user_name' => Str::random(10),
'email' => Str::random(10).'@gmail.com',
'password' => Hash::make('password'),
],
[
'user_name' => Str::random(10),
'email' => Str::random(10).'@gmail.com',
'password' => Hash::make('password'),
],
]);
DB::table('categories')->insert([
[
'user_id' => 1,
'category_name' => Str::random(10),
],
[
'user_id' => 2,
'category_name' => Str::random(10),
],
[
'user_id' => 3,
'category_name' => Str::random(10),
],
]);
DB::table('books')->insert([
[
'user_id' => 1,
'category_id' => 1,
'book_name' => Str::random(5),
],
[
'user_id' => 1,
'category_id' => 1,
'book_name' => Str::random(5),
],
[
'user_id' => 1,
'category_id' => 1,
'book_name' => Str::random(5),
],
]);
}
}
$ php artisan db:seed --class=initBooksSeeder
上記を実行すれば、データが3件ずつ投入されているのが確認できます。
暇なときに予定を探せるアプリyoteiPickerをリリースしました。
エンジニア・フリーランスにおすすめの転職サイト↓
https://www.kamome-susume.com/enginner-job-change-site/