データベースのテーブルに親子関係を持たせて、親を削除したら、子も削除する様にしたい時、外部キー制約を設定します。しかし、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'); } } // ... }