Maison  >  Questions et réponses  >  le corps du texte

Migration Laravel pour ajouter un attribut nullable à la colonne de table existante

<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粉674757114P粉674757114411 Il y a quelques jours460

répondre à tous(1)je répondrai

  • P粉068486220

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

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

    répondre
    0
  • Annulerrépondre