WEBアプリとデータベースの関係性
ブログや会員制サイトのように、ログイン機能や
情報を登録、表示、修正、削除などの操作をするためには
情報を表示するWEBサイトと情報を溜め込むための記憶媒体
データベース(以下、DBと略称)が必要です
DBはレンタルサーバーやローカルサーバーに
配置することができ、管理するためには
MySQLなどのソフトをインストールする必要があります
WEBアプリとは高度な機能を持ったWEBサイトの総称で
youtube,amazon,Facebookなどユーザーによって
操作が可能なサイトもWEBアプリと言えます
マイグレーションとは
マイグレーションとは古いアプリケーション
(ソフトウェア、データ、通信環境)の資産を
新しい環境へ移行させることを指します
具体的に古いPCから新しいPCに
データを移行させる手順も
マイグレーションと言えます
Laravelのマイグレーションとは
マイグレーションファイルという
テーブルの設計図を作成しておき
連携するDBへコマンドで設計図の内容を反映させ
DBにテーブルを作成する方法を指します
マイグレーションとSQLの違い
SQLはDBへ命令することでテーブルを作成したり
操作することができるプログラミング言語になります
マイグレーションはマイグレーションファイルという
テーブル情報の設計図を作成しコマンドを実行することで
一気にテーブルを作成する手段を指します
SQLと異なるメリットとして
マイグレーションを実行後にはファイルが残るため
履歴管理やロールバック(元の状態に戻す)ことが
でき安全かつ保守性が高い手法になります
マイグレーションファイルを生成する
次のコマンドを実行することで
Laravelのフレームワークに
マイグレーションファイルの雛形が生成されます
① カレントディレクトリをプロジェクトファイルにします
$ cd /Applications/MAMP/htdocs/①*******
② マイグレーションファイルを生成するコマンドを実行します
php artisan make:migration create_②#####_table --create=②#####
-----解説-----
・"①*******"は作成したプロジェクト名を記述します
・"create_②#####_table"は作成したい任意のテーブル名を記述します
・"②#####"は作成したい任意のテーブル名を記述します
・createオプションにテーブル名を追加することで雛形にテーブル名が反映されます
マイグレーションファイルの命名規則
マイグレーションファイルの名前を決める際には
次の命名規則を守りましょう。
テーブルを新規作成する
テーブルの命名規則
記法 | 複数or単数 | 例 |
---|---|---|
スネークケース | 複数形 | users / item_tables |
・テーブルを新規で追加するとき
create_tests_table
-----解説-----
・「テーブルを作成する」意味なのでテーブル名の前後に"create"と”table”付与します
・単語をつなぐ際はアンダーラインを用いてスネークケースで繋ぎます
$ php artisan make:migration create_tests_table --create=tests
既存のテーブルにカラム(列)を追加する
add_name_to_tests_table
-----解説-----
・「テーブルにカラム(列)を追加する」意味なので以下をスネークケースで繋ぎます
"add"_”カラム名”_"to”_"テーブル名"_"table"
・カラムを追加するとき
php artisan make:migration add_name_to_tests_table --table=tests
-----解説-----
・tableオプションに"カラム名"を追加する先のテーブル名を記述します
ファイルの生成場所
database/migrations
マイグレーションファイルを編集する
作成された雛形を編集することでテーブルに
追加したいカラム名やデータ型を指定できます
Schema::create('テーブル名', function (Blueprint $table) {
$table->bigIncrements('id');
// 以下のようにカラム(列)を追加する
$table->string('カラム名');
$table->text('カラム名');
$table->timestamps();
});
-----解説-----
// ファイル生成の際にオプションを設定するとテーブル名雛形に反映されています
// "id"は主キーのため必須項目であり削除するとエラーが発生します
// bigIncrementsメソッドは、自動増分を示します
// "timestamps"も必須項目であり削除するとエラーが発生します
// "text"や"string"などのデータ型は任意の型を設定します
主キーとは
データベースのデータを一意(重複しない値)に識別するための項目のこと
修正、削除、更新の操作で主キーがなければレコードを特定できないため
必ず必要なカラムになります。
データ型の種類
テーブルのデータ型を指定し、入力されるデータの範囲を指定すれば
誤ったデータがカラムに入力されることを防ぐことができます
データ型 | 種類 |
---|---|
integer | 数値(整数) |
decimal | 数値(精度の高い小数) |
float | 数値(浮動小数) |
string | 文字(短い文字列) |
text | 文字(長い文字列) |
date | 日付 |
datetime | 日時 |
time | 時刻 |
timestamp | タイムスタンプ |
binary | バイナリ |
boolean | 真偽 |
timestampで作成日時と更新日時のカラムを作成
$table->timestamps();
追加するカラムにtimestamps
のデータ型を指定すると
データベースのカラムに自動で
created_at
と updated_at
が作成されます
timestamps
の引数にはカラム名は必要ありません
生成されたマイグレーションファイル
次のようなコマンドでマイグレーションファイルを生成すると
成功すれば次のようなインフォメーションが表示され
マイグレーションファイルが生成されています
$ php artisan make:migration create_tests_table --create=tests
生成されたマイグレーションファイル
最初から存在するマイグレーションファイル
migrationsフォルダにはすでにマイグレーションファイルが
存在する場合があります。
LaravelにはWEBアプリの認証機能(ログイン機能)を
自動で作成してくれる機能があります
認証機能を作成するには連携するDBに
users
テーブルが必要になる他
実装に対して様々なテーブルが必要になるため
存在する既存のマイグレーションファイルは削除せず
まとめて実行しましょう
マイグレーションを実行する
.envファイル
に連携するDBの情報を
上書きすることでマイグレーションを
実行した際に対象のDB名へテーブルが作成されます
.envファイルは隠しファイル
なので
隠しファイルを見れるよう設定します
「command」+「shift」+「.」 (MACの場合)
テスト用に次のようなマイグレーションファイルを
作成しました
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('company_id');
$table->string('product_name');
$table->integer('price');
$table->integer('stock');
$table->text('comment');
$table->string('img_path');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('products');
}
};
マイグレーションの内容を実行する
$ php artisan migrate
上記のコマンドでマイグレーションファイルの内容を
データベースに反映することができます。
マイグレーション済みのファイル
マイグレーションを実行したファイルは
マイグレーション済とステータスが記録されるため
再度使用することができません
次のコマンドで確認ができます
※テスト用にマイグレ未実施の
コピーファイルを配置しています
マイグレーション済みのファイルを確認する
$ php artisan migrate:status
すでに実行されている場合はRan
保留中の場合はPending
になります
マイグレーションファイルは繰返し使用できない
マイグレーション済になったファイルはファイル内部を
編集してもマイグレーションを再度実行することはできません
マイグレーション済の判断基準はファイル名に依存する
ため
ファイル名をリネームするか、新しいマイグレーションファイルを
作成することでマイグレーションを繰返し実行することができます
リネームする場合はファイル名の日付部分を適当に
修正するだけでマイグレーションファイルが
使用可能になります
例
2022_08_09_******
_create_products_table.php
マイグレーションを元に戻す(ロールバック)
次のコマンドを実行することで
最後に実行したマイグレーションを
元の状態に戻すことができます
マイグレーションでテーブルを作成していた場合は
テーブルが削除されますので注意してください
ロールバックを実行すると
作成していたマイグレーションが
保留中の状態に戻るため再度
マイグレーションを実行することができますl。
$ php artisan migrate:rollback
モデルの命名規則
LaravelでDBを操作するには
モデルと呼ばれるプログラムファイルが必要です
モデルのファイル名を決定する場合は
次の命名規則に従うと綺麗な
プログラムに仕上がります
記法 | 複数or単数 | 例 |
---|---|---|
アッパーキャメル | 単数 | UserData |