Trik kanggo Hubungan Eloquent Laravel

Salah sawijining kekuwatan Laravel yaiku sintaksis sing elegan. Yen sampeyan duwe akeh model lan hubungan ing Laravel (amarga akeh tabel ing basis data), traversing asring bisa diakhiri karo kode sing kurang elegan. Sajrone wektu, telung ekstensi cilik wis kabukten dhewe kanggo aku, sing pengin dakenalake kanthi ringkes ing ngisor iki. Kita mung nggunakake sawetara warisan, cara sihir lan koleksi khusus.


Pisanan, kita nggawe model anyar ing aplikasi \ ConvenienceModel.php:

b45e29b9125c2ab565b5526442437686

Banjur kita ngidini kabeh model dadi warisan saka ConvenienceModel sing anyar:

b45e29b9125c2ab565b5526442437686

Campur fungsi sampeyan dhewe karo sesambetan

Yen sampeyan pengin entuk model sing gegandhengan, sampeyan nggunakake sintaks standar kanggo nelpon:

b45e29b9125c2ab565b5526442437686

Yen saiki nambah logika bisnis dhewe, sampeyan seneng nggunakake notasi kasus unta (ngisor):

b45e29b9125c2ab565b5526442437686

Kita pengin standarisasi sintaks kaloro jinis kasebut. Kanggo nindakake iki, kita nambah __call metode sulap menyang ConvenienceModel:

b45e29b9125c2ab565b5526442437686

Telpon iki bisa uga digawe ing conto ing ndhuwur:

b45e29b9125c2ab565b5526442437686

Priksa obyek kosong

Yen sampeyan pengin ngasilake jeneng negara kasebut menyang alamat pribadi, sampeyan bakal asring ndeleng kode ing ngisor iki:

b45e29b9125c2ab565b5526442437686

Kanggo nyegah, kita nyakup perpustakaan stringhelper lan ngasilake obyek khusus kelas kosong kosong yen ora ditemokake model:

b45e29b9125c2ab565b5526442437686

Iki uga nggawe telpon sukses (ing conto iki, yen ana sing ditemokake, jeneng negara kasebut output, ing kabeh kasus string kosong).

b45e29b9125c2ab565b5526442437686

Yen kita uga pengin nutupi kasus manawa pangguna kanthi ID 42 bisa uga ora ana, kita uga bakal nggawe fungsi helper cilik kanggo iki:

b45e29b9125c2ab565b5526442437686

Telpon ing ngisor iki menehi string kosong sanajan pangguna ora ana:

b45e29b9125c2ab565b5526442437686

Trep ngliwati hubungan n: m

Pungkasan, kita pengin nyederhanakake kode ing ngisor iki:

b45e29b9125c2ab565b5526442437686

Kanggo iki, kita nggunakake kemungkinan koleksi khusus . Kita pisanan ngembangake model kenyamanan:

b45e29b9125c2ab565b5526442437686

Banjur kita nggawe aplikasi file \ Helpers \ ConvenienceCollection.php , sing njamin manawa nelpon fungsi sing ora dingerteni ing koleksi nindakake fungsi kanggo kabeh item ing koleksi:

b45e29b9125c2ab565b5526442437686

Dadi, kita bisa nggunakake kode ing ngisor iki kanggo ngasilake kabeh jeneng kabeh negara kabeh alamat kabeh wong tuwa saka wong kasebut:

b45e29b9125c2ab565b5526442437686

Nanging telpon kaya ing ngisor iki uga bisa ditindakake:

b45e29b9125c2ab565b5526442437686

Urut nganggo macem-macem kolom

Telpon ing ngisor iki mung miturut lokasi , sanajan bisa uga ora kaya sing dikarepake:

b45e29b9125c2ab565b5526442437686

Kanggo ngaktifake ngurutake miturut sawetara kolom, kita nggedhekake ConvenienceCollection:

b45e29b9125c2ab565b5526442437686

Kanthi mangkono kita bisa ngurutake koleksi miturut sawetara kolom kanthi:

b45e29b9125c2ab565b5526442437686

Ngurutake standar

Kita ngembangake ConvenienceCollection kanthi fungsi tambahan liyane:

b45e29b9125c2ab565b5526442437686

Saiki sampeyan bisa menehi saben fungsi fungsi ngurutake standar kanggo saben model:

b45e29b9125c2ab565b5526442437686

Kanthi iki, kita bisa ngurutake koleksi kanthi:

b45e29b9125c2ab565b5526442437686

Jeneng obyek

Saben model ngetrapake cara getLabel (getName beda-beda gumantung karo model):

b45e29b9125c2ab565b5526442437686

Kanthi iki, sampeyan bisa kanthi cepet lan cepet ngetrapake jeneng obyek. Sampeyan banjur bisa ngetrapake cara pambantu sortByLabel ing ConvenienceCollection:

b45e29b9125c2ab565b5526442437686

Asil kosong

Yen langkah penengah kosong, fungsi Laravel luwih dhisik () lan pungkasan () biasane ngasilake nol. Mula kita ngenalake getFirst () lan getLast () saengga panggilan ing ngisor iki mesthi sukses:

b45e29b9125c2ab565b5526442437686

Kanthi iki, kita ngirim __empty_helper bali, sing __x diakoni:

b45e29b9125c2ab565b5526442437686

Bali