Laravel迁移禁用外键检查的好方法
在运行 laravel 迁移时,我遇到了一个小小的不便。我使用Laravel 5.1。
由于有很多表具有许多关系,因此我可能无法重命名迁移文件以使它们以正确的顺序运行,因此不会违反外键约束。这是我过去曾经做过的事情,而且非常不切实际。
我现在要做的是像这样定义每个迁移:
class CreateSomeTable extends Migration
{
public function up()
{
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
// my table definitions go here
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
}
public function down()
{
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
// drop table
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
}
}
这样做的问题是编写起来很乏味,并且会使代码变得混乱。
我还考虑过创建两个虚拟迁移文件,其唯一目的是启用和禁用外键检查,并且我会以这样的方式命名它们,即它们在每次迁移的开始和结束时运行。
如果有一个优雅的解决方案,是否有可能将其应用于播种过程,因为这往往也是一个问题。
这显然是一个非常即兴的解决方案,我问是否有更好的方法来做到这一点。有没有一些和方法可以覆盖或类似的东西?beforeMigrate
afterMigrate
如果没有,你该怎么做?
任何见解都将不胜感激,我不喜欢我所说的所有选项。