Laravel 外部キーを含むテーブルをmigrationファイルで作成する

Laravelで多対多のrelationを扱うのにmigrationが必要になった.
これまではゴリゴリSQL文とshell scriptでDB作成・バックアップ・インポートetc…を行ってきたけど, これを機にmigrationの基本を学ぶ.

migrationファイルの基本的な書き方は以前記事にまとめた.
その時の記事はこちら.

Laravel migrationファイルの基本的な書き方
デフォルトで用意されているmigrationファイルを眺めて基本的な書き方を学ぶ. 概要は次の通り.

概要は次の通り.

動作環境

  • centOS6.8
  • Laravel5.3
  • MySQL5.7.15

前提条件

  • 次の2ファイルは設定済みとする.
    • .env
    • database.php
  • データベースは作成済みとする
    • 今回使用するDB名は gMapAppDB
  • 既にいくつかのテーブルが存在している

私の環境では既にDBとテーブルがいくつか存在している.
新たにmigrationを行うと何かしら不具合が生じると思うので, そのあたりもまとめてゆく.

今回のゴール

次の点が実現できればゴールとする.

  • そもそもmigrationとは何かを知る
  • ticketsテーブルを期待通りの構造にmigrationファイルを編集する
  • Artisanコマンドによって期待通りのテーブルが作成できる

事前に手元に DB.xxxtable があり, それを再現できるようなmigrationファイルを作ってゆく方針.

今回作成する tickets テーブルについて

今回は ticketsテーブルを作成してみる.
作成するテーブルの構造は次の通り.

index周辺は次の通り.

使われ方としては次のような状況を想定.

  • 飲食店がお客さんに割引券を発行する
  • その割引券には次の情報が含まれる
    • 店舗情報(shop_id)
    • メニュー情報(menu_id)
    • etc…

参考

migrationってなに

マイグレーションはデータベースをバージョンコントロールする一手法です。

引用: Laravel 5.dev マイグレーションと初期値設定 | readouble.com

つまりこういうこと.

  • Laravelにおけるmigraitonとは
  • migraitonファイル と
  • laravelのコマンド で
  • DBのtable がいい感じに作れる
  • そして, テーブルをある状態まで戻すこと(ロールバック)が可能

migrationで何ができるのか

次のようなことが可能.

  • テーブル作成
  • テーブル更新
  • ロールバック

ロールバックとは, テーブルを過去の状態に戻すこと.

migrationの使い方

ざっくり次のような手順.

  1. SQL文でDB作成 (済)
  2. migrationファイルを作成
    • ここでどんなテーブル構造にするかを定義する
  3. migration実行
    • migrationファイルで定義した通りにテーブルが作成される
  4. MySQLで確認
    • 意図したテーブルが出来上がっているか確認する

DBの作成は既に済んでいるとして, 2番目から解説.

migrationファイルを作成

migrationファイルの書き方がキモ.

基本的な書き方は以前書いたこちらの記事を参照.

Laravel migrationファイルの基本的な書き方
デフォルトで用意されているmigrationファイルを眺めて基本的な書き方を学ぶ. 概要は次の通り.

概要は次の通り.

  • migrationファイル 作成
  • migrationファイル 編集
  • migrationファイル 実行

migrationファイル 作成

次のコマンドでmigrationファイルの生成が可能.

php artisan make:migration create_テーブル名_table

生成されたファイルは次の場所に格納される.
/database/migrations

今回は ticketsテーブルを作りたいので次のコマンドを実行する.

  • php artisan make:migration create_tickets_table

ちゃんとできているか確認する.

作成されたファイルは次の通り.

migrationファイル 編集

最終的に作成したいテーブル構造は次の通り.
冒頭で紹介したものを同じものを再掲.

こうなるようにmigrationファイルを編集してゆく.
外部キーとして shop_id, menu_id を持つので, 外部キー制約設定がポイントになるかも.

最終的に出来上がったmigrationファイルは次の通り.

以下, ポイントを解説.

nullable()

NULL値を許可

default(デフォルト値)

デフォルト値の設定

comment

該当カラムが何を表しているのかをコメントとして記述.
分かりにくいカラム名を付けてしまった場合に重宝する.

timestamps()

NULL値可能なcreated_atとupdated_atカラム追加

引用 : Laravel 5.3 データベース:マイグレーション | readouble.com

created_at, updated_at の2つを作成してくれるのがポイント.

index(‘カラム名’);

外部キー制約を用いる場合は, 対象のカラムにindexを作成する必要がある.

次のコマンドによって手元のテーブルのindex設定が確認可能.

onDelete(), onUpdate()

親テーブルの削除・更新時の子テーブルの挙動を設定する.
親子関係は次の通り.

  • 子テーブル
    • tickets
  • 親テーブル
    • shops
    • menus

設定したオプション cascade の意味は次の通り.

オプション Delete時の挙動 Update時の挙動
cascade 参照先がなくなると同時に削除 参照先の変更に追従

ここまででmigrationファイルが作成完了.

migration実行

作成したmigrationファイルを元に, テーブルが期待通りに作成されていることを確認する.

同名のテーブルがすでに存在する場合には次のようなエラーが出るので注意.

いざ、実行.

MySQLで確認

MySQLにログインして確認してみる.

ふむふむ.

うん、成功してるね.

今回は以上.

スポンサーリンク
336 x 280 – レクタングル(大)
336 x 280 – レクタングル(大)
  • このエントリーをはてなブックマークに追加

この記事が気に入ったら
いいね!しよう

トップへ戻る