Migration Laravel pour ajouter un attribut nullable à la colonne de table existante
P粉674757114
P粉674757114 2023-09-05 12:58:02
0
1
496
<p>J'ai commencé à écrire un petit projet personnel sur Laravel 10. Le problème que j'ai rencontré est le suivant : </p> <ol> <li>J'ai une table utilisateur avec un UUID de clé étrangère - role_id. ≪/li> <li>Je souhaite ajouter un attribut nullable sur cette colonne sans supprimer la table. ≪/li> <li>J'ai créé une nouvelle migration pour apporter les modifications. ≪/li> <li>Le package doctrine/dbal est installé afin de (théoriquement) changer de colonne. ≪/li> <li>Mon code dans la migration est le suivant :</li> </ol> <pre class="brush:php;toolbar:false;">fonction publique up() : void { Schema::table('utilisateurs', fonction (Blueprint $table) { $table->foreignUuid('role_id')->nullable()->constrained('roles')->change(); }); } /*** Inverser les migrations.*/ fonction publique down() : vide { Schema::table('utilisateurs', fonction (Blueprint $table) { $table->foreignUuid('role_id')->nullable(false)->constrained('roles')->change(); }); }</pré> <p>Mais lorsque j'exécute php artisan migrate, j'obtiens l'erreur suivante - SQLSTATE[42S21] : La colonne existe déjà : 1060 Nom de colonne en double 'role_id' (Connexion : mysql, SQL : les utilisateurs de la table alter ajoutent role_id char(36) nul). </p> <p>Toute suggestion sur la façon de modifier correctement les colonnes serait grandement appréciée. </p>
P粉674757114
P粉674757114

répondre à tous(1)
P粉068486220

Vous pouvez essayer ce qui suit :

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

Ou vous pouvez utiliser l'instruction SQL d'origine :

    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)');

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal