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

Laravelのマイグレーション機能を利用してテーブルを作成する手順。 シーディング(Seeding) 機能を使ってデータ作成まで行います。
環境
- OS CentOS Linux release 7.7.1908 (Core)
- Laravel 6.5.1
- DB mysql Ver 8.0.18
DB作成
事前にDBを作成しておく
## ログイン
mysql -u ユーザー名 -p
## DB作成
mysql> CREATE DATABASE laravel;
Query OK, 1 row affected (0.10 sec)
Laravelプロジェクトの作成
ここではprojというプロジェクト名で作成してます
※Laravelの構築手順はこちら
## ディレクトリ作成
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のみ編集
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root → ユーザー名を変更
DB_PASSWORD= → パスワードを記述
テーブル作成
事前準備が完了したのでマイグレーションを利用してテーブルを作成する。
ここではcustomerというテーブルを作成をします
## コマンド実行
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
<?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 を編集してテーブルを作成します。
$table->string('name');
を追加します。
public function up()
{
Schema::create('customer', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name'); // nameを追加
$table->timestamps();
});
}
テーブル作成。下記のコマンドを実行してテーブルを作成します。
php artisan migrate
<出力結果>
Migrating: yyyy_MM_dd_HHmmss_create_customer_table
Migrated: yyyy_MM_dd_HHmmss_create_customer_table (0.74 seconds)
テーブルが作成されていることが確認できる
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 | |
+------------+---------------------+------+-----+---------+----------------+
データ作成
シーダーファイルでテーブルのデータを作成します
php artisan make:seeder CustomerTableSeeder
<出力結果>
Seeder created successfully.
/var/www/html/proj/database/seeds内にCustomerTableSeeder.phpが作成されます。
CustomerTableSeeder.php
<?php
use Illuminate\Database\Seeder;
class CustomerTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}
この CustomerTableSeeder.php を編集します。
今回はcustomerテーブルのnameに山田太郎という名前を追加します。
public function run()
{
//追加
DB::table("customer")->insert([
"name" => "山田太郎",
"created_at" => new DateTime(),
"updated_at" => new DateTime()
]);
}
編集後に、下記のコマンドを実行します。
php artisan db:seed --class=CustomerTableSeeder
<出力結果>
Database seeding completed successfully.
customerテーブルにデータが追加されていることがわかります。
mysql> select * from customer;
+----+--------------+---------------------+---------------------+
| id | name | created_at | updated_at |
+----+--------------+---------------------+---------------------+
| 1 | 山田太郎 | 2019-11-14 01:28:40 | 2019-11-14 01:28:40 |
+----+--------------+---------------------+---------------------+
マイグレーションのロールバック
ロールバックは下記のコマンドで可能です。
php artisan migrate:rollback
確認してみる
## ソースコード作成
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 | |
+------------+---------------------+------+-----+---------+----------------+
ロールバックを実行します
## ロールバック実行
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)
ロールバックされていることが確認できます。
## 確認
mysql> show columns from rollbacktest;
<出力結果>
ERROR 1146 (42S02): Table 'laravel.rollbacktest' doesn't exist
-
前の記事
Windows10 hostsファイルよりインターネット閲覧制限をする 2019.11.18
-
次の記事
GitHub上でwebサイトを公開する手順 2019.11.19
コメントを書く