Laravel 5.1: Habilite restrições de chave externa do SQLite

Em SQLite, as restrições de chave externa são desabilitadas por padrão .

Qual é a melhor maneira de configurar a conexão de database SQLite do Laravel 5.1 para permitir restrições de foreign keys? Não vejo uma maneira de fazer isso em ['connections']['sqlite'] em /config/database.php .

Aqui está uma solução. No método boot() do App\Providers\AppServiceProvider , adicione:

 if (DB::connection() instanceof \Illuminate\Database\SQLiteConnection) { DB::statement(DB::raw('PRAGMA foreign_keys=1')); } 

Graças a @RobertTrzebinski para esta publicação no blog sobre o Laravel 4.

Para mim, usando um DB de fachada no App \ Providers \ AppServiceProvider no Laravel 5.2 produziu um erro. Aqui está a minha solução:

 if(config('database.default') == 'sqlite'){ $db = app()->make('db'); $db->connection()->getPdo()->exec("pragma foreign_keys=1"); } 

Você também pode ativar foreign keys por teste (arquivo), quando os testes realmente dependem de tabelas com foreign keys.

Aqui está uma característica: (por exemplo, tests/ForeignKeys.php )

 make('db'); $db->getSchemaBuilder()->enableForeignKeyConstraints(); } } 

não se esqueça de executar o método em algum lugar em sua cadeia de configuração de teste. Eu adicionei o meu como uma substituição para o meu TestCase: ( tests/TestCase.php )

 enableForeignKeys(); } } ... 

Depois disso, você pode adicioná-lo aos seus testes, assim: