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

仕様が変わる度にDB構造も変化しちゃう.
私が今開発中のプロジェクトはそんな状態.

これまではゴリゴリSQL文とshell scriptでDB作成・バックアップ・インポートetc…を行ってきた.
でも, この作業も不毛だと思いまして.
そろそろDB構造のバージョン管理をしたいので, migrationを使いながら覚えようと思う.

migrationファイルの基本的な文法については以前記事にまとめた.
その時の記事はこちら.

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

概要は次の通り.

動作環境

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

前提条件

  • 次の2ファイルは設定済みとする.
    • .env
    • database.php
  • データベースは作成済みとする
    • 今回使用するDB: gMapAppDB
    • 今回使用するtable: tickets

参考

今回のゴール

今回のゴールは, 外部キーを含む ticketsテーブル をmigrationによって生成すること.

ticketsテーブルは, 何かしらのチケット情報を格納するテーブルだと思って頂ければokです.

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

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

まずは今回作成する tickets テーブル について.

概要は次の通り.

  • 最終的に欲しい tickets の構造
  • tickets がどんな使われ方を想定しているのか

最終的に欲しい tickets の構造

最終的に tickets の構造は次のようになってほしい.

色々とフィールドがあるが, それほど実作業に影響はない.
これらについては必要に応じて解説する.

indexは次の通り.

tickets がどんな使われ方を想定しているのか

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

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

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にログインして確認してみる.

ふむふむ.

うん、成功してるね.

余談だが, ↑このSQL文末尾を \G;(セミコロンを付ける) と, 出力結果に

と表示されてしまう.
気になる人は ;(セミコロン) は付けないように.

今回は以上.

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

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

スポンサーリンク
336 x 280 – レクタングル(大)
トップへ戻る