gpt4 book ai didi

mysql - Laravel 迁移不兼容的外键

转载 作者:行者123 更新时间:2023-12-05 00:57:27 24 4
gpt4 key购买 nike

我被告知要删除我们其中一张表的自动递增功能,但这开始导致问题:

PDOException::("SQLSTATE[HY000]: General error: 3780 Referencing column 'limitCardId' and referenced column 'id' in foreign key constraint 'rolling_control_cards_limitcardid_foreign' are incompatible.")

以下是有问题的键:

PK $table->integer('id');

FK $table->integer('limitCardId')->unsigned()->index();

关系$table->foreign('limitCardId')->references('id')->on('limit_cards');

我已经阅读了其他几篇建议几种解决方案的帖子,但没有一个解决我的问题,这是我已经尝试过的列表:

在我的基表模型中定义:

    protected $primaryKey = 'id';
public $incrementing = false;

添加Schema::disableForeignKeyConstraints();up() 方法的开头,以及Schema::enableForeignKeyConstraints(); 最后,我运行了 composer dump-autoload, php artisan config:clear, php artisan 缓存:清除.

按照建议,这是两个表格的精简版,基表:

 public function up()
{
Schema::create('limit_cards', function (Blueprint $table) {
$table->integer('id');
$table->timestamps();
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('limit_cards');
}

相关表:

    public function up()
{
Schema::create('rolling_control_cards', function (Blueprint $table) {
$table->increments('id');
$table->integer('limitCardId')->unsigned()->index();
$table->unique(['controlCardNumber', 'limitCardId']);
$table->timestamps();

$table->foreign('limitCardId')->references('id')->on('limit_cards');
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('rolling_control_cards');
}

最佳答案

为了使外键引用兼容,它们必须是完全相同的类型,包括它们的签名。

$table->integer('id'); 默认创建一个有符号整数列。要么使其未签名以匹配 limitCardId,要么使其都已签名。

关于mysql - Laravel 迁移不兼容的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60097479/

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