gpt4 book ai didi

php - Laravel 迁移,检查 hasColumn 但获取 Column Exists MySQL 错误

转载 作者:可可西里 更新时间:2023-11-01 07:44:00 25 4
gpt4 key购买 nike

我正在尝试创建迁移,向现有表中添加一列。

为表执行初始创建的 up() 方法如下所示:

public function up()
{
Schema::create('lead_assignments', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('version');
$table->integer('reactor_track_id')->unsigned();
$table->integer('lead_id')->unsigned();
$table->integer('agent_id')->unsigned();
$table->integer('lead_stage_id')->unsigned();
$table->integer('managed_by_id')->unsigned();
$table->integer('side_of_deal_id')->unsigned();
$table->integer('coordinator_id')->unsigned();
$table->decimal('referral_fee', 15, 2);
$table->timestamp('response_ts');
$table->timestamps();
$table->softDeletes();

$table->foreign('lead_id')->references('id')->on('leads');
$table->foreign('agent_id')->references('id')->on('agents');
$table->foreign('lead_stage_id')->references('id')->on('lead_stages');
$table->foreign('managed_by_id')->references('id')->on('managed_bys');
$table->foreign('side_of_deal_id')->references('id')->on('side_of_deal');
$table->foreign('coordinator_id')->references('id')->on('users');
});
}

我的 Alter up() 方法如下所示:

   public function up()
{
Schema::table('lead_assignments', function (Blueprint $table) {
if (!Schema::hasColumn('lead_assignments', 'property_type_id')) {
$table->integer('property_type_id')->unsigned();

$table->foreign('property_type_id')
->references('id')
->on('property_types');
}
if (!Schema::hasColumn('lead_assignments', 'referral_fee_expiration')) {
$table->date('referral_fee_expiration')->nullable();
}

$table->dropForeign('lead_assignments_side_of_deal_id_foreign');
});
Schema::table('lead_assignments', function (Blueprint $table) {
$table->integer('side_of_deal_id')->nullable()->change();
});
}

在这里,我尝试添加 property_types 列,先检查它是否存在,然后在创建后将其设为外键。那很好用。然后我检查是否有 referral_fee_expiration 列,如果没有,我会尝试创建它。

在运行“migrate install”后进行初始迁移时,出现此 MySQL 错误:

[PDOException]
SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'referral_fee_expiration'

此表没有其他更改,我不确定为什么它提示该列已经存在,而除了这个之外没有任何迁移将它放在那里,我正在检查它是否存在创建前。

有什么建议吗?

注意:

这是从一个新的数据库开始的。我运行“php artisan migrate install”然后“php artisan migrate”产生错误。

最佳答案

如果您之前尝试运行迁移并且它因任何错误而中断,那么在这种情况下,导致错误的语句之前的语句已经执行。但是,由于迁移在完全完成之前返回了错误,因此状态将显示为未迁移或待处理。

当您尝试重新运行迁移时,它会给您一个重复列的错误,因为语句在错误之前执行并且该列已经添加到表中 - 可能这就是原因。

在这种情况下,即使您回滚迁移,在抛出错误之前已经执行的语句也不会回滚,因为迁移本身未注册完成状态。

因此,您可能必须使用 phpMyAdmin 或任何此类工具检查 MYSQL 数据库,如果表中存在有问题的列,请手动删除该列并尝试再次运行迁移。

希望它能帮助您解决问题。

关于php - Laravel 迁移,检查 hasColumn 但获取 Column Exists MySQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35436445/

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