Salah satu kekuatan Laravel ialah sintaksnya yang elegan. Jika anda mempunyai banyak model dan hubungan dalam Laravel (disebabkan oleh banyak jadual dalam pangkalan data), traversing selalunya boleh berakhir dengan kod yang kurang elegan. Dari masa ke masa, tiga sambungan kecil telah terbukti berjaya untuk saya, yang ingin saya perkenalkan secara ringkas di bawah. Untuk melakukan ini, kami hanya menggunakan beberapa warisan, kaedah ajaib dan koleksi tersuai.
Mula-mula kita membuat model baru di bawah app \ ConvenienceModel.php:
b45e29b9125c2ab565b5526442437686
Kemudian kami membiarkan semua model mewarisi dari ConvenienceModel baru kami:
b45e29b9125c2ab565b5526442437686
Campurkan fungsi anda sendiri dengan hubungan
Sekiranya anda ingin mendapatkan model yang disambungkan, anda menggunakan sintaks standard untuk memanggilnya:
b45e29b9125c2ab565b5526442437686
Sekiranya sekarang anda menambah logik perniagaan anda sendiri, anda ingin menggunakan notasi casing unta (bawah):
b45e29b9125c2ab565b5526442437686
Kami mahu menyeragamkan sintaks kedua-dua varian. Untuk melakukan ini, kami menambahkan kaedah sihir __call ke ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Panggilan ini juga boleh dilakukan dalam contoh di atas:
b45e29b9125c2ab565b5526442437686
Periksa objek kosong
Jika anda ingin mengeluarkan nama negara untuk alamat seseorang, anda sering melihat kod berikut:
b45e29b9125c2ab565b5526442437686
Untuk mengelakkan perkara ini, kita sertakan pustaka stringhelper dan mengembalikan objek khas kelas kosong `empty` jika model tidak ditemui.:
b45e29b9125c2ab565b5526442437686
Ini bermakna bahawa panggilan itu berjaya (dalam contoh ini, jika sesuatu ditemui, nama negara dikeluarkan, dalam semua kes lain rentetan kosong):
b45e29b9125c2ab565b5526442437686
Sekiranya kita juga ingin menutup kes bahawa pengguna dengan ID 42 mungkin tidak wujud, kita juga akan membina fungsi pembantu kecil untuk ini:
b45e29b9125c2ab565b5526442437686
Panggilan berikut memberikan rentetan kosong walaupun pengguna tidak wujud sama sekali:
b45e29b9125c2ab565b5526442437686
Melintasi hubungan n: m dengan senang
Akhirnya, kami ingin mempermudah kod berikut:
b45e29b9125c2ab565b5526442437686
Untuk ini kami menggunakan kemungkinan koleksi khusus . Kami mula-mula mengembangkan model kemudahan:
b45e29b9125c2ab565b5526442437686
Seterusnya, kita mencipta fail app\Helpers\ConvenienceCollection.php , yang memastikan bahawa apabila fungsi yang tidak diketahui dipanggil dalam Koleksi, fungsi tersebut dilaksanakan untuk semua item dalam koleksi.:
b45e29b9125c2ab565b5526442437686
Oleh itu, kita boleh menggunakan kod berikut untuk mengeluarkan semua nama semua negara dari semua alamat semua ibu bapa orang tersebut:
b45e29b9125c2ab565b5526442437686
Tetapi panggilan seperti berikut juga boleh dilakukan:
b45e29b9125c2ab565b5526442437686
Isih mengikut beberapa lajur
Arahan berikut hanya menyusun mengikut lokasi , walaupun itu mungkin bukan hasil yang dimaksudkan.:
b45e29b9125c2ab565b5526442437686
Untuk membolehkan penyortiran mengikut beberapa lajur, kami memperluas ConvenienceCollection kami:
b45e29b9125c2ab565b5526442437686
Dengan itu kita dapat menyusun koleksi mengikut beberapa lajur dengan:
b45e29b9125c2ab565b5526442437686
Pengisihan standard
Kami memperluaskan ConvenienceCollection dengan fungsi tambahan yang lain:
b45e29b9125c2ab565b5526442437686
Sekarang anda boleh memberikan setiap model fungsi penyisihan standard individu:
b45e29b9125c2ab565b5526442437686
Oleh itu, kita boleh menyusun koleksi dengan:
b45e29b9125c2ab565b5526442437686
Nama objek
Setiap model menerapkan kaedah getLabel (getName berbeza-beza bergantung pada model):
b45e29b9125c2ab565b5526442437686
Dengan ini anda dapat dengan cepat dan mudah memaparkan nama objek. Anda kemudian boleh melaksanakan kaedah pembantu sortByLabel di ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Hasil kosong
Sekiranya langkah perantaraan kosong, Laravel berfungsi pertama () dan terakhir () biasanya kembali sifar. Oleh itu, kami memperkenalkan getFirst () dan getLast () supaya panggilan berikut sentiasa berjaya:
b45e29b9125c2ab565b5526442437686
Dengan ini kami memberikan kembali __empty_helper yang dikenali __x:
b45e29b9125c2ab565b5526442437686