SQLiteで外部キー制約(Foreign Key)が効かない時

データベースのテーブルに親子関係を持たせて、親を削除したら、子も削除する様にしたい時、外部キー制約を設定します。しかし、SQLiteの場合は デフォルトでは外部キー制約(Foreign Key)がOFFになっています。その為、DBにつなぐ度に以下のSQLコマンドの実行が必要になります。

PRAGMA foreign_keys = ON;

では、Laravel 5.1 のアプリでは何処で、”PRAGMA…” を実行すれば良いのでしょうか?

調べた結果、下記の場所で実行できました。

app/providers/AppServiceProvider.php

<?php namespace AppProviders;

use IlluminateSupportServiceProvider;
use DB;    // 追加

class AppServiceProvider extends ServiceProvider {
    public function boot()
    {
        // sqliteの時、外部制約をONにする
        if ( DB::getDriverName() == 'sqlite' ) {
            DB::statement('PRAGMA foreign_keys=1');
        }
    }
    // ...
}

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中