在进行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方法,我可以覆盖或沿着这些线?
如果没有,你怎么去做呢?
任何见解都会受到赞赏,我不喜欢我所说的所有选项.
解决方法:
当Lumen / Laravel开始使用Passport时,我有一个类似的任务,我不得不放弃从lucadegasperi/oauth2-server-laravel开始的先前的oauth服务器实现.
我终于设法通过创建2个迁移来实现目标,其中第一个清除外键,第二个实际删除表.
我必须在Laravel’s Passport(2016-06-01)的迁移之前使用日期,因此它们将在这些之前执行.
2016_05_31_000000_clear_old_oauth_relations.PHP
//...
class ClearOldOauthRelations extends Migration
{
public function up()
{
Schema::disableForeignKeyConstraints();
// drop foreign keys
Schema::table('oauth_access_tokens', function (BluePrint $table) {
$table->dropForeign('oauth_access_tokens_session_id_foreign');
});
//...
Schema::enableForeignKeyConstraints();
}
//...
}
并在第二个文件中
2016_05_31_000001_clear_old_oauth.PHP
//...
public function up()
{
Schema::disableForeignKeyConstraints();
Schema::drop('oauth_access_tokens');
//...
Schema::enableForeignKeyConstraints();
}
//...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。