SQLSTATE[HY000]: Allgemeiner Fehler: 3780 Die referenzierende Spalte „user_id“ und die referenzierte Spalte „id“ im Fremdschlüssel sind nicht kompatibel

Lesezeit: 5 Minuten

Benutzeravatar von Rodri6uez
Rodri6uez

Ich führe Migrationen in Laravel durch und dieser Fehler tritt auf, wenn ich mit dem Befehl fortfahre PHP artisan migrate:

In Connection.php Zeile 664:

SQLSTATE[HY000]: Allgemeiner Fehler: 3780 Die referenzierende Spalte „user_id“ und die referenzierte Spalte „id“ in der Fremdschlüsseleinschränkung „almacen_movimientos_user_id_foreign“ sind nicht kompatibel. (SQL: Tabelle ändern almacen_movimientos Einschränkung hinzufügen almacen_movimientos_user_id_foreign Unbekannter Schlüssel (user_id) Verweise users (id

) auf Löscheinschränkung)

In PDOStatement.php Zeile 129:

SQLSTATE[HY000]: Allgemeiner Fehler: 3780 Die referenzierende Spalte „user_id“ und die referenzierte Spalte „id“ in der Fremdschlüsseleinschränkung „almacen_movimientos_user_id_foreign“ sind nicht kompatibel.

Meine Migrationen sehen so aus:

almacen_movimientos-Tabelle

public function up()
{
    Schema::create('almacen_movimientos', function (Blueprint $table) {
        $table->unsignedBigInteger('id');
        $table->integer('cliente_proveedor_id');
        $table->integer('empresa_id');
        $table->integer('user_id');
        $table->enum('tipo' , ['ENTRADA' , 'SALIDA' , 'REUBICACION' , 'TRASPASO' , 'DEVOLUCION' , 'MSRO' , 'ENTRADA POR TRASPASO' , 'SALIDA POR TRASPASO'])->nullable();
        $table->string('referencia' , 255)->nullable();
        $table->string('observaciones' , 255)->nullable();
        $table->timestamp('created_at');
        $table->timestamp('updated_at');
        $table->timestamp('deleted_at');
        $table->string('transportista' , 255)->nullable();
        $table->string('operador' , 255)->nullable();
        $table->string('procedencia' , 255)->nullable();
        $table->integer('almacen_id')->nullable();

        $table->foreign('cliente_proveedor_id')->references('id')->on('empresas')->onDelete('restrict');
        $table->foreign('empresa_id')->references('id')->on('empresas')->onDelete('restrict');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('restrict');
        $table->foreign('almacen_id')->references('id')->on('almacenes')->onDelete('restrict');
    });
}

Benutzertabelle

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->unsignedBigInteger('id');
        $table->string('name' , 255);
        $table->string('apellido_paterno' , 115)->nullable();
        $table->string('apellido_materno' , 115)->nullable();
        $table->dateTime('fecha_nacimiento')->nullable();
        $table->string('telefono1' , 10)->nullable();
        $table->string('telefono2' , 10)->nullable();
        $table->string('calle' , 255)->nullable();
        $table->string('numero' , 45)->nullable();
        $table->string('colonia' , 255)->nullable();
        $table->string('codigo_postal' , 6)->nullable();
        $table->string('email' , 255)->unique();
        $table->string('user' , 20)->nullable()->unique();
        $table->string('password' , 255);
        $table->string('palabra_secreta' , 255);
        $table->string('remember_token' , 100)->nullable();
        $table->unsignedInteger('empresa_id')->nullable();
        $table->timestamp('created_at');
        $table->timestamp('updated_at');
        $table->timestamp('deleted_at');

        $table->foreign('empresa_id')->references('id')->on('empresas')->onDelete('restrict');
    });
}

Kann mir jemand sagen, was ich falsch mache? Ich kann das nicht beheben.

Danke schön.

Grüße.

  • Der Typ des Fremdschlüssels muss genau mit der ID übereinstimmen, auf die wir verweisen möchten. In diesem Fall müssen Sie den Typ der Fremdschlüsselspalten in den Typ „unsignedBigInteger“ ändern.

    – Tohid Dadashnezhad

    25. August 2020 um 19:10 Uhr

  • Und vergessen Sie nicht, php artisan migrate:fresh auszuführen, um die gesamten Tabellen neu zu erstellen.

    – Tohid Dadashnezhad

    25. August 2020 um 19:11 Uhr

  • Benutze das $table->unsignedBigInteger('user_id')->nullable();

    – Sobir

    25. August 2020 um 19:22 Uhr

  • Zeigt immer noch den gleichen Fehler 🙁

    – Rodri6uez

    25. August 2020 um 19:41 Uhr

  • $table->id(); //UNSIGNED BIG INTEGER So $table->unsignedBigInteger('empresa_id')

    – Muhammad Shahzad

    5. Mai 2021 um 18:56 Uhr

Benutzeravatar von M Khalid Junaid
M Khalid Junaid

In users In der Tabelle haben Sie den Primärschlüssel mit der ID „unsigned bigint“ und „in“ definiert almacen_movimientos Tabelle die referenziert user_id ist definiert als int

ändern

$table->integer('user_id');

Zu

$table->unsignedBigInteger('user_id');

Die Struktur und der Datentyp von PRIMARY KEY und FOREIGN KEY müssen gleich sein

  • @Rodri6uez stelle sicher, dass du dasselbe hast Kollationen Überprüfen Sie für beide Felder die Datenbank

    – M Khalid Junaid

    26. August 2020 um 15:27 Uhr


Abdelsalam Megaheds Benutzeravatar
Abdelsalam Megahed

Stellen Sie sicher, dass der Datentyp des Fremdschlüssels mit der Referenzspalte übereinstimmt

  • Überprüfen Sie auch die Kodierung Ihrer Spalte, wenn es sich um einen Typ handelt VARCHAR o.ä.

    – Gesuchter

    22. April um 3:05

Sie können das Problem auch auf elegantere Weise lösen, indem Sie Ihr Schema ändern almacen_movimientos Sie sollten Folgendes ändern:

$table->integer('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('restrict');

mit

$table->foreignId('user_id')->constrained()->onDelete('restrict');

Schauen Sie sich die Dokumentation an, Sie können es ab Laravel 7 tun:
https://laravel.com/docs/8.x/migrations#foreign-key-constraints

Benutzer-Avatar von Jonathan Güths
Jonathan Güths

$table->increments('id')  

Verwenden Sie unsignedInteger in Ihrem Fremdschlüssel

$table->id() 

            

Verwenden Sie unsignedBigInteger in Ihrem Fremdschlüssel

Befolgen Sie den Datentyp, um diese Probleme zu beheben.

public function up(){
Schema::create('posts', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('body');
    $table->unsignedBigInteger('user_id');
    $table->timestamps();
    $table->foreign('user_id')
        ->references('id')
        ->on('users')
        ->onDelete('cascade');
});
}

Es ist mir aufgefallen, dass die lokale Spalte (‘id’) auf bigIncrements(‘id’) und die fremde auf Unsigned Big Integer gesetzt wurde.

  • Tun Sie dies in Ihrer gesamten Migrationsdatei und stellen Sie sicher, dass Sie alle lokalen Dateien vor den ausländischen Dateien erstellen. Erstellen Sie beispielsweise Benutzer vor Produkten, da der Benutzer im Königreich der Produkte ein Fremder ist.

    – Codedreamer

    14. September 2021 um 19:59 Uhr

Benutzeravatar von Cursorrux
Cursorrux

$table->integer('user_id');
$table->foreignId('user_id');

Du solltest es versuchen Das : –

$table->unsignedBigInteger('user_id');

  • Tun Sie dies in Ihrer gesamten Migrationsdatei und stellen Sie sicher, dass Sie alle lokalen Dateien vor den ausländischen Dateien erstellen. Erstellen Sie beispielsweise Benutzer vor Produkten, da der Benutzer im Königreich der Produkte ein Fremder ist.

    – Codedreamer

    14. September 2021 um 19:59 Uhr

1452560cookie-checkSQLSTATE[HY000]: Allgemeiner Fehler: 3780 Die referenzierende Spalte „user_id“ und die referenzierte Spalte „id“ im Fremdschlüssel sind nicht kompatibel

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy