在运行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
方法可以覆盖,或者类似这样的方法?
如果没有,你是如何解决这个问题的?
任何见解都将不胜感激,我不喜欢我所提出的所有选项。
\DB::getSchemaBuilder()->disableForeignKeyConstraints()
。不确定是否有更好的调用方法。 - x-yuri