Laravel 5.1:启用SQLite外键约束

Tac*_*tex 13 php sqlite foreign-keys laravel laravel-5

在SQLite中,默认情况下禁用外键约束.

配置Laravel 5.1的SQLite数据库连接以启用外键约束的最佳方法是什么?我看不到这样做的方式 ['connections']['sqlite']/config/database.php.

Tac*_*tex 22

这是一个解决方案.在 boot()方法中 App\Providers\AppServiceProvider,添加:

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

感谢@RobertTrzebinski撰写关于Laravel 4的文.


viv*_*nov 6

对我来说,使用Laravel 5.2中App\Providers\AppServiceProvider中的Facade DB产生了错误.这是我的解决方案:

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


bam*_*ole 6

由于我只想在我的测试中使用它,但在所有测试中,我最终在Tests\TestCase类中得到了一个简单的实现,如下所示:

 abstract class TestCase extends BaseTestCase
 {
        use CreatesApplication;

        protected function setUp()
        {
            parent::setUp();

            $this->enableForeignKeys();
        }

        /**
         * Enables foreign keys.
         *
         * @return void
         */
        public function enableForeignKeys()
        {
            $db = app()->make('db');
            $db->getSchemaBuilder()->enableForeignKeyConstraints();
        }
}
Run Code Online (Sandbox Code Playgroud)

这就像一个魅力:-)