cari

Rumah  >  Soal Jawab  >  teks badan

Symfony 5 - Penapis schema_doctrine tidak berfungsi dengan betul

<p>Apabila saya melaksanakan baris arahan <code>doctrine:schema:update --force</code> dalam projek saya, saya cuba mengabaikan dua entiti seperti ini: </p> <pre class="brush:php;toolbar:false;">/*** @ORMEntity(readOnly=true) * @ORMTable(name="view_tableau_de_bord")*/ kelas ViewTableauDeBord { //... }</pre> <p>Dalam fail konfigurasi doktrin.yaml saya: </p> <pre class="brush:php;toolbar:false;">doktrin: dbal: default_connection: lalai sambungan: lalai: url: '%env(resolve:DATABASE_URL)%' pemandu: 'pdo_pgsql' versi pelayan: '12' charset:utf8 schema_filter: ~^(?!view_)~ # ...</pre> <p>Doktrin terus menjana semua entiti dan pandangan saya adalah dalam <kod>penapis_schema</kod>. Apakah penjelasan anda untuk ini? Ini adalah kali pertama saya menggunakan pilihan ini dalam projek. </p> <p>Tetapan projek:</p> <ul> <li>Symfony 5.4.14</li> <li>PHP 7.4.26</li> <li>Doktrin: orm: 2.13.3</li> <li>Teori/Nota: 1.13.3</li> <li>pakej doktrin/doktrin: 2.7.0</li> <li>pakej pemindahan doktrin/doktrin: 3.2.2</li> <li>symfony/doctrine-bridge:5.4.14</li> <li>Teori/Peranti Data: 1.5.3</li> </ul></p>
P粉002023326P粉002023326445 hari yang lalu528

membalas semua(2)saya akan balas

  • P粉186897465

    P粉1868974652023-08-27 17:01:05

    Entiti yang ditandakan dengan bendera readOnly=true tidak dijejaki untuk kemas kini lagi tetapi masih boleh untuk memasukkan atau memadam baris, seperti yang dijelaskan dalam dokumentasi.

    Arahan doctrine:schema:update masih akan mengambil kira jadual untuk mengemas kini skema.

    Dalam jawapan kepada soalan "Abaikan entiti Doctrine2 apabila menjalankan kemas kini pengurus skema" terdapat 3 pilihan yang sah untuk mengabaikan entiti dalam kemas kini skema.

    balas
    0
  • P粉455093123

    P粉4550931232023-08-27 14:04:02

    penapis_skema

    schema_filter bukan dibuat untuk "menapis" entiti tetapi untuk menapis jadual db daripada kesedaran doktrin.

    Ini contohnya:
    Dengan mengandaikan anda mencipta jadual secara manual yang dikemas kini daripada cronjob php mentah tersuai yang dipanggil view_booking_by_customer_per_year, jadual ini tidak digunakan oleh kod anda dalam projek anda tetapi digunakan untuk analisis data.

    Ini adalah contoh biasa, anda tidak mahu menjana pertanyaan sedemikian setiap kali anda mengemas kini skema.

    DROP TABLE view_booking_by_customer_per_year; // NO I DONT WANT THIS

    Jadi menggunakan schema_filter anda boleh memberitahu doktrin untuk mengabaikan jadual ini dalam proses pengesahan dan kemas kininya.

    Cuba buat jadual rawak menggunakan sql mentah dan gunakan doctrine:schema:validate. Ia akan menunjukkan database is not in sync ralat. Sebaik sahaja saya memasukkannya ke dalam schema_filter ralat tidak lagi berlaku.

    Ia berfungsi untuk doctrine:migration:diff and doctrine:schema:update

    schema_ignore_class

    Walau bagaimanapun, jika anda ingin mengelak daripada menjana entiti dalam pangkalan data, anda boleh menemuinya daripada pautan dalam jawapan Ernesto:

    schema_ignore_classes:
       - Reference\To\My\Class
       - Reference\To\My\OtherClass

    Hanya berfungsi dari versi Doktrin 2.7. Anda boleh mendapatkan contoh penuh di sini: Abaikan entiti Doctrine2 apabila menjalankan kemas kini Pengurus Skema

    Gunakan Migrasi Doktrin

    Saya sangat menasihati anda untuk menggunakan doctrine:migration:diff then doctrine:migration:migrate instead of doctrine:schema:update untuk melakukan perubahan pada pangkalan data Tidak mengapa untuk pembangun tempatan, tetapi apabila dalam pengeluaran ia adalah amalan yang sangat buruk.

    https://symfony.com/bundles/DoctrineMigrationsBundle/current/index.html

    balas
    0
  • Batalbalas