suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Laravel-Migration zum Hinzufügen eines Nullable-Attributs zur vorhandenen Tabellenspalte

<p>Ich habe begonnen, ein kleines persönliches Projekt zu Laravel 10 zu schreiben. Das Problem, auf das ich gestoßen bin, ist wie folgt: </p> <ol> <li>Ich habe eine Benutzertabelle mit einer Fremdschlüssel-UUID – Role_ID. </li> <li>Ich möchte dieser Spalte ein Nullable-Attribut hinzufügen, ohne die Tabelle zu löschen. </li> <li>Ich habe eine neue Migration erstellt, um die Änderungen vorzunehmen. </li> <li>Das Paket doctrine/dbal wird installiert, um (theoretisch) Spalten zu ändern. </li> <li>Mein Code in der Migration lautet wie folgt: </li> </ol> <pre class="brush:php;toolbar:false;">public function up(): void { Schema::table('users', function (Blueprint $table) { $table->foreignUuid('role_id')->nullable()->constrained('roles')->change(); }); } /*** Machen Sie die Migrationen rückgängig.*/ öffentliche Funktion down(): void { Schema::table('users', function (Blueprint $table) { $table->foreignUuid('role_id')->nullable(false)->constrained('roles')->change(); }); }</pre> <p>Aber wenn ich php artisan migrate ausführe, erhalte ich die folgende Fehlermeldung: SQLSTATE[42S21]: Spalte existiert bereits: 1060 Doppelter Spaltenname „role_id“ (Verbindung: MySQL, SQL: Alter Table Users Add Role_ID Char(36)) Null). </p> <p>Für Vorschläge zur korrekten Änderung der Spalten wären wir sehr dankbar. </p>
P粉674757114P粉674757114513 Tage vor546

Antworte allen(1)Ich werde antworten

  • P粉068486220

    P粉0684862202023-09-06 00:54:03

    您可以尝试以下操作:

          Schema::table('users', function (Blueprint $table) {
                $table->char('role_id', 36)->nullable()->constrained('roles')->change();
            });
    

    或者可以使用原始的SQL语句:

        DB::statement('ALTER TABLE users MODIFY role_id CHAR(36) NULL');
        DB::statement('ALTER TABLE users ADD CONSTRAINT fk_users_role_id FOREIGN KEY (role_id) REFERENCES roles (id)');
    
    

    Antwort
    0
  • StornierenAntwort