Symfony 5 - Penapis schema_doctrine tidak berfungsi dengan betul
P粉002023326
P粉002023326 2023-08-26 18:16:28
0
2
541
<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粉002023326
P粉002023326

membalas semua(2)
P粉186897465

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.

P粉455093123

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan