#はじめに
Laravelのマイグレーションファイルとシーダーファイルを使って、テーブルとその初期値を作成します。
#準備
###データベースの作成
まず、データベースを作成します。
プロジェクトで使用する「データベース」「ユーザー」「パスワード」を作成しておきます。
各自の環境によるので、割愛します。
###データベース接続の設定
Laravelプロジェクト直下にある「.env」ファイルを以下のように修正します。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE="データベース名"
DB_USERNAME="ユーザー名"
DB_PASSWORD="ユーザーパスワード"
mysql以外を使用する場合は、DB_CONNECTION等も修正します。
準備は完了です。
#テーブルの作成
###マイグレーションファイルの作成
Larabelプロジェクトの直下に移動後、コンソールで以下のコマンドを実行します。
今回はテーブル名を"items"とします。
php artisan make:migration create_items_table
以下の表示が出れば成功です。
Created Migration: yyyy_MM_dd_HHmmss_create_items_table
(yyyy_MM_dd_HHmmssは作成時の日時が入ります。)
###マイグレーションファイルの修正
作成したマイグレーションファイルは、Laravelプロジェクト>database>migrations下に作られています。
初期状態で以下の内容が書かれています。
upはマイグレーションを実行する際に実行され、downはマイグレーションを元に戻す際に実行されます。
class CreateItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->bigIncrements('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('items');
}
}
upの中に列の定義を記述します。
$table->"型名"("列名")
の形です。
$table->bigIncrements('id');
$table->string('name'); // 追加
$table->timestamps();
###マイグレーションの実行
Larabelプロジェクトの直下に移動後、コンソールで以下のコマンドを実行します。
php artisan migrate
以下の表示が出れば成功です。
Migrating: yyyy_MM_dd_HHmmss_create_items_table
Migrated: yyyy_MM_dd_HHmmss_create_items_table
環境によっては、「SQLSTATE[42000]: Syntax error or access violation」が出ます。
いくつか方法があるようですが、私は以下の対策をしました。
Laravelプロジェクト>app>Providers>AppServiceProvider.phpファイルのboot()内に、以下の記述を追加します。
public function boot()
{
Schema::defaultStringLength(191);
}
#モデルの作成
Larabelプロジェクトの直下に移動後、コンソールで以下のコマンドを実行します。
php artisan make:model Item
以下の表示が出れば成功です。
Model created successfully.
#初期値の作成
###シーダーファイルの作成
Larabelプロジェクトの直下に移動後、コンソールで以下のコマンドを実行します。
php artisan make:seeder ItemsTableSeeder
以下の表示が出れば成功です。
Seeder created successfully.
###シーダーファイルの修正
作成したマイグレーションファイルは、Laravelプロジェクト>database>seeds下に作られています。
初期状態で以下の内容が書かれています。
class ItemsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}
runの中に初期値の作成を記述します。
流れは、
「先ほど作成したモデルをnewする→値を設定→save()で登録」
です。
複数件作りたい場合は、for文などで記述します。
for($i = 1; $i <= 5; $i++)
{
$item = new Item();
$item->name = '名前' . $i;
$item->save();
}
###シーダーの実行
Larabelプロジェクトの直下に移動後、コンソールで以下のコマンドを実行します。
php artisan db:seed --class=ItemsTableSeeder
以下の表示が出れば成功です。
Database seeding completed successfully.
確認すると、きちんと追加されていました。
+----+-------+---------------------+---------------------+
| id | name | created_at | updated_at |
+----+-------+---------------------+---------------------+
| 1 | 名前1 | 2019-04-11 21:13:35 | 2019-04-11 21:13:35 |
| 2 | 名前2 | 2019-04-11 21:13:35 | 2019-04-11 21:13:35 |
| 3 | 名前3 | 2019-04-11 21:13:35 | 2019-04-11 21:13:35 |
| 4 | 名前4 | 2019-04-11 21:13:35 | 2019-04-11 21:13:35 |
| 5 | 名前5 | 2019-04-11 21:13:35 | 2019-04-11 21:13:35 |
+----+-------+---------------------+---------------------+
5 rows in set (0.00 sec)
#コマンドまとめ
マイグレーションファイル作成
※テーブル名は「小文字始まり、複数形」
php artisan make:migration create_"テーブル名"_table
マイグレーション実行
php artisan migrate
モデル作成
※モデル名は「大文字始まり、単数形」
php artisan make:model "モデル名"
シーダーファイル作成
php artisan make:seeder "モデル名の複数形"TableSeeder
シーダーの実行
php artisan db:seed --class="シーダー名"