Rumah  >  Soal Jawab  >  teks badan

Penghijrahan Laravel untuk menambah atribut nullable pada lajur jadual sedia ada

<p>Saya telah mula menulis projek peribadi kecil di Laravel 10. Masalah yang saya hadapi adalah seperti berikut: </p> <ol> <li>Saya mempunyai jadual pengguna dengan UUID kunci asing - role_id. </li> <li>Saya mahu menambah atribut nullable pada lajur ini tanpa memadamkan jadual. </li> <li>Saya mencipta migrasi baharu untuk membuat perubahan. </li> <li>Pakej doktrin/dbal dipasang untuk (secara teorinya) menukar lajur. </li> <li>Kod saya dalam penghijrahan adalah seperti berikut:</li> </ol> <pre class="brush:php;toolbar:false;">public function up(): void { Skema::jadual('pengguna', fungsi (Blueprint $table) { $table->foreignUuid('role_id')->nullable()->constrained('roles')->change(); }); } /*** Balikkan penghijrahan.*/ fungsi awam down(): void { Skema::jadual('pengguna', fungsi (Blueprint $table) { $table->foreignUuid('role_id')->nullable(false)->constrained('roles')->change(); }); }</pre> <p>Tetapi apabila saya menjalankan php artisan migrate, saya mendapat ralat berikut - SQLSTATE[42S21]: Lajur sudah wujud: 1060 Nama lajur pendua 'role_id' (Sambungan: mysql, SQL: alter table users add role_id char(36 ) null). </p> <p>Sebarang cadangan tentang cara mengubah suai lajur dengan betul akan sangat dihargai. </p>
P粉674757114P粉674757114411 hari yang lalu456

membalas semua(1)saya akan balas

  • P粉068486220

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

    Anda boleh mencuba perkara berikut:

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

    Atau anda boleh menggunakan pernyataan SQL asal:

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

    balas
    0
  • Batalbalas