Laravel6 マイグレーションを利用してDBテーブルを作成

Laravelのマイグレーション機能を利用してテーブルを作成する手順。 シーディング(Seeding) 機能を使ってデータ作成まで行います。
環境
- OS CentOS Linux release 7.7.1908 (Core)
- Laravel 6.5.1
- DB mysql Ver 8.0.18
DB作成
事前にDBを作成しておく
1 2 3 4 5 6 |
## ログイン mysql -u ユーザー名 -p ## DB作成 mysql> CREATE DATABASE laravel; Query OK, 1 row affected (0.10 sec) |
Laravelプロジェクトの作成
ここではprojというプロジェクト名で作成してます
※Laravelの構築手順はこちら
1 2 3 4 5 6 7 8 9 10 11 |
## ディレクトリ作成 sudo mkdir /var/www/html/proj ## プロジェクト作成 composer create-project laravel/laravel /var/www/html/proj --prefer-dist ## 権限変更 sudo chmod 755 /var/www/html/proj ## 移動 cd /var/www/html/proj |
Laravel DB接続設定
Laravelプロジェクト配下の.envを編集。今回はmysqlなのでmysqlのみ編集
1 2 3 4 5 6 |
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root → ユーザー名を変更 DB_PASSWORD= → パスワードを記述 |
テーブル作成
事前準備が完了したのでマイグレーションを利用してテーブルを作成する。
ここではcustomerというテーブルを作成をします
1 2 |
## コマンド実行 php artisan make:migration create_customer_table |
/var/www/html/proj/database/migrations内にyyyy_MM_dd_HHmmss_create_customer_table.phpというファイルが作成されます。
yyyy_MM_dd_HHmmss_create_customer_table.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateCustomerTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('customer', function (Blueprint $table) { $table->bigIncrements('id'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('customer'); } } |
このマイグレーションファイル yyyy_MM_dd_HHmmss_create_customer_table.php を編集してテーブルを作成します。
1 |
$table->string('name'); |
を追加します。
1 2 3 4 5 6 7 8 |
public function up() { Schema::create('customer', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); // nameを追加 $table->timestamps(); }); } |
テーブル作成。下記のコマンドを実行してテーブルを作成します。
1 2 3 4 5 |
php artisan migrate <出力結果> Migrating: yyyy_MM_dd_HHmmss_create_customer_table Migrated: yyyy_MM_dd_HHmmss_create_customer_table (0.74 seconds) |
テーブルが作成されていることが確認できる
1 2 3 4 5 6 7 8 9 |
mysql> show columns from customer; +------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------------+------+-----+---------+----------------+ | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +------------+---------------------+------+-----+---------+----------------+ |
データ作成
シーダーファイルでテーブルのデータを作成します
1 2 3 4 |
php artisan make:seeder CustomerTableSeeder <出力結果> Seeder created successfully. |
/var/www/html/proj/database/seeds内にCustomerTableSeeder.phpが作成されます。
CustomerTableSeeder.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php use Illuminate\Database\Seeder; class CustomerTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // } } |
この CustomerTableSeeder.php を編集します。
今回はcustomerテーブルのnameに山田太郎という名前を追加します。
1 2 3 4 5 6 7 8 9 |
public function run() { //追加 DB::table("customer")->insert([ "name" => "山田太郎", "created_at" => new DateTime(), "updated_at" => new DateTime() ]); } |
編集後に、下記のコマンドを実行します。
1 2 3 4 |
php artisan db:seed --class=CustomerTableSeeder <出力結果> Database seeding completed successfully. |
customerテーブルにデータが追加されていることがわかります。
1 2 3 4 5 6 |
mysql> select * from customer; +----+--------------+---------------------+---------------------+ | id | name | created_at | updated_at | +----+--------------+---------------------+---------------------+ | 1 | 山田太郎 | 2019-11-14 01:28:40 | 2019-11-14 01:28:40 | +----+--------------+---------------------+---------------------+ |
マイグレーションのロールバック
ロールバックは下記のコマンドで可能です。
1 |
php artisan migrate:rollback |
確認してみる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
## ソースコード作成 php artisan make:migration create_rollbacktest_table <出力結果> Created Migration: 2019_11_14_014551_create_rollbacktest_table ## テーブル作成 php artisan migrate <出力結果> Migrating: 2019_11_14_014551_create_rollbacktest_table Migrated: 2019_11_14_014551_create_rollbacktest_table (0.33 seconds) ## テーブル確認 mysql> show columns from rollbacktest; +------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------------+------+-----+---------+----------------+ | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +------------+---------------------+------+-----+---------+----------------+ |
ロールバックを実行します
1 2 3 4 5 6 |
## ロールバック実行 php artisan migrate:rollback <出力結果> Rolling back: 2019_11_14_014551_create_rollbacktest_table Rolled back: 2019_11_14_014551_create_rollbacktest_table (0.51 seconds) |
ロールバックされていることが確認できます。
1 2 3 4 5 |
## 確認 mysql> show columns from rollbacktest; <出力結果> ERROR 1146 (42S02): Table 'laravel.rollbacktest' doesn't exist |
-
前の記事
Windows10 hostsファイルよりインターネット閲覧制限をする 2019.11.18
-
次の記事
GitHub上でwebサイトを公開する手順 2019.11.19
コメントを書く