Trik kanggo Hubungan Eloquent Laravel

Salah sawijining kekuwatan Laravel yaiku sintaks sing elegan. Yen sampeyan duwe akeh model lan hubungan ing Laravel (amarga akeh tabel ing database), traversing asring bisa mungkasi kode kurang elegan. Sajrone wektu, telung ekstensi cilik wis kabukten sukses kanggo aku, sing dakkarepake ing ngisor iki. Kanggo nindakake iki, kita mung nggunakake sawetara warisan, cara gaib lan koleksi adat.


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 uga bisa ditindakake ing conto ing ndhuwur:

b45e29b9125c2ab565b5526442437686

Priksa obyek kosong

Yen sampeyan pengin output jeneng negara kanggo alamat pribadi, sampeyan kerep ndeleng kode ing ngisor iki:

b45e29b9125c2ab565b5526442437686

Kanggo nyegah iki, kita kalebu perpustakaan stringhelper lan bali obyek khusus saka kelas kosong kosong yen model ora ketemu:

b45e29b9125c2ab565b5526442437686

Iki tegese telpon kasebut sukses (ing conto iki, yen ana sing ditemokake, jeneng negara kasebut metu, ing kabeh kasus liyane 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

Kita banjur nggawe file app\Helpers\ConvenienceCollection.php , sing mesthekake yen nelpon fungsi sing ora dingerteni kanggo koleksi nglakokake 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

Panggilan ing ngisor iki mung diurutake miturut lokasi , sanajan iki ora 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