Nilai Default dalam Ajaran
Bagaimana saya mengatur nilai default dalam Ajaran 2?
319
15
Bagaimana saya mengatur nilai default dalam Ajaran 2?
Catatan bahwa ini menggunakan SQL
DEFAULT
, yang tidak didukung untuk beberapa bidang sepertiGUMPALAN
danTEKS
.Database nilai default tidak "portable" yang didukung. Satu-satunya cara untuk menggunakan database nilai default adalah melalui
columnDefinition
pemetaan atribut mana anda menentukanSQL
snippet (DEFAULT
menyebabkan inklusif) untuk kolom bidang yang dipetakan ke.Anda dapat menggunakan:
PHP-tingkat nilai-nilai default yang disukai seperti ini juga benar tersedia di baru dibuat dan bertahan benda (Doktrin tidak akan kembali ke database setelah bertahan objek baru untuk mendapatkan nilai default).
Set up konstruktor di badan anda dan set nilai default yang ada.
Gunakan:
dan tidak:
Misalnya:
Update
Satu lagi alasan mengapa baca dokumentasi untuk Symfony akan pernah keluar dari tren. Ada solusi sederhana untuk kasus tertentu dan untuk mengatur
tipe field
pilihanempty_data
ke nilai default.Sekali lagi, solusi ini hanya untuk skenario mana yang kosong input dalam bentuk set DB lapangan ke null.
Latar belakang
Tidak ada jawaban sebelumnya membantu saya dengan skenario tertentu tapi saya menemukan solusi.
Aku punya bentuk bidang yang dibutuhkan untuk berperilaku sebagai berikut:
Saya kemudian mencoba semua rekomendasi yang diberikan di sini. Biarkan aku daftar mereka:
Ada yang berhasil dan semua karena bagaimana Symfony menggunakan Entity class.
PENTING
Symfony bentuk bidang mengesampingkan nilai-nilai default diatur pada Entitas kelas. Artinya, skema anda untuk DB dapat memiliki nilai default yang didefinisikan tetapi jika anda meninggalkan non-required field kosong ketika anda mengirimkan formulir,
bentuk->handleRequest()
dalambentuk->isValid()
metode yang akan menimpa mereka nilai default padaEntitas
kelas dan mengatur mereka ke field input nilai. Jika input nilai field yang kosong, maka akan menetapkanEntitas
propertinull
.http://symfony.com/doc/current/book/forms.html#handling-form-submissions
Saya Solusi
Set nilai default pada controller anda setelah
bentuk->handleRequest()
dalambentuk->isValid()
metode:Bukan solusi yang indah tapi itu bekerja. Aku mungkin bisa membuat
validasi kelompok
tapi mungkin ada orang yang melihat masalah ini sebagai transformasi data bukan validasi data, saya serahkan pada anda untuk memutuskan.Menimpa Setter (Tidak Bekerja)
Saya juga mencoba untuk mengesampingkan
Entitas
setter cara ini:Ini, meskipun tampak bersih, itu doesn't bekerja. Alasannya adalah bahwa kejahatan
bentuk->handleRequest()
metode ini tidak menggunakan Model's penyetel untuk update data (menggali ke dalambentuk->setData()
untuk rincian lebih lanjut).Solusi yang saya gunakan adalah
LifeCycleCallback
. Masih menunggu untuk melihat jika ada lebih "asli" metode, misalnya@Kolom(type="string", default="hello nilai default")
.Anda dapat melakukannya dengan menggunakan xml dan juga:
Berikut adalah bagaimana saya soal itu untuk diriku sendiri. Di bawah ini adalah contoh Entitas dengan nilai default pada MySQL. Namun, ini juga memerlukan setup konstruktor di badan anda, dan bagi anda untuk mengatur nilai default yang ada.
Bekerja untuk saya pada database mysql juga:
Tak satu pun dari ini bekerja untuk saya. Saya menemukan beberapa dokumentasi pada ajaran's situs yang mengatakan bahwa untuk menetapkan nilai secara langsung untuk mengatur nilai default.
http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/faq.html
Ini dimasukkan nilai yang saya inginkan.
Jika anda menggunakan yaml definisi untuk entitas, berikut ini bekerja untuk saya pada database postgresql:
Menambahkan @romanb brilian menjawab.
Hal ini menambah sedikit biaya overhead dalam migrasi, karena anda jelas tidak bisa menciptakan lapangan dengan not null constraint dan dengan tidak ada nilai default.
Dengan jawaban ini, saya mendorong anda untuk berpikir mengapa anda perlu nilai default di dalam database di tempat pertama? Dan biasanya itu adalah untuk memungkinkan menciptakan benda-benda dengan not null constraint.
Aku berjuang dengan masalah yang sama. Saya ingin memiliki default value dari database ke dalam badan (secara otomatis). Coba tebak, aku melakukannya :)
Sementara pengaturan nilai dalam konstruktor akan bekerja, menggunakan Doktrin Siklus peristiwa-peristiwa yang mungkin menjadi solusi yang lebih baik.
Dengan memanfaatkan
prePersist
Siklus hidup Acara, anda bisa mengatur nilai default pada entitas hanya pada awal bertahan.Berhati-hati ketika menetapkan nilai-nilai default pada definisi properti! Melakukannya di konstruktor sebaliknya, untuk tetap bebas masalah. Jika anda menentukan pada definisi properti, kemudian bertahan objek ke database, kemudian membuat beban parsial, maka tidak dimuat properties akan lagi memiliki nilai default. Yang lebih berbahaya jika anda ingin bertahan objek lagi.