gpt4 book ai didi

php - Laravel 迁移禁用外键检查的好方法

转载 作者:IT王子 更新时间:2023-10-28 23:47:34 32 4
gpt4 key购买 nike

在运行 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;');
}
}

这样做的问题是编写起来很乏味,而且会使代码困惑。

我还考虑过创建两个虚拟迁移文件,其唯一目的是启用和禁用外键检查,并且我会以这样的方式命名它们,即它们将在每个文件的开头和结尾运行迁移。

如果有一个优雅的解决方案,是否也可以将其应用于播种过程,因为这也往往是一个问题。

这显然是一个非常临时的解决方案,我想问一下是否有更好的方法。是否有一些我可以覆盖的 beforeMigrateafterMigrate 方法或类似的方法?

如果没有,您将如何着手去做?

任何见解都将不胜感激,我不喜欢我所说的所有选项。

最佳答案

当 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();
}
//...

关于php - Laravel 迁移禁用外键检查的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34298639/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com