PHP Laravel PDOException一般错误引用列和外键约束中的引用列不兼容

Cha*_*eel 3 php terminal laravel composer-php

我目前正在通过终端在Laravel中进行迁移,并且在尝试使用php artisan migration时出现了这两个错误;我将在下面打印错误:

Exception trace:

  1   PDOException::("SQLSTATE[HY000]: General error: 3780 Referencing column 'room_id' and referenced column 'id' in foreign key constraint 'contacts_room_id_foreign' are incompatible.")
      /Users/shaquilenoor/Desktop/chatapi/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458

  2   PDOStatement::execute()
      /Users/shaquilenoor/Desktop/chatapi/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458
Run Code Online (Sandbox Code Playgroud)

根据异常跟踪中包含的代码,问题似乎在以下代码中:

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateContactsTable extends Migration
{
    public function up()
    {
        Schema::create('contacts', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('user1_id');
            $table->unsignedInteger('user2_id');
            $table->integer('room_id')->unique();
            $table->timestamps();
            $table->foreign('room_id')->references('id')->on('rooms');
            $table->foreign('user1_id')->references('id')->on('users');
            $table->foreign('user2_id')->references('id')->on('users');
        });
    }

    public function down()
    {
        Schema::dropIfExists('contacts');
    }
}
Run Code Online (Sandbox Code Playgroud)

关于如何解决的任何想法?

Pay*_*jad 10

如果您使用的是Laravel 5.8,则新迁移将更改为大增量,因此,为了解决折旧错误,只需将integer更改为bigInteger,例如:

$table->integer('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
Run Code Online (Sandbox Code Playgroud)

将更改为:

$table->bigInteger('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
Run Code Online (Sandbox Code Playgroud)


Eme*_*nom 5

要么更改原始迁移

大增量()

只是

增量();


或者在你的外键列中做

大整数()

代替

整数()

  • 请在您的答案中添加一些解释,以便其他人可以从中学习 - 为什么需要这样做? (2认同)