Salah satu kelebihan Laravel adalah sintaksnya yang elegan. Sekiranya anda mempunyai banyak model dan hubungan di Laravel (kerana banyak jadual dalam pangkalan data), melintasi sering kali boleh berakhir dengan kod yang kurang elegan. Dalam jangka masa, tiga sambungan kecil membuktikan diri saya, yang ingin saya perkenalkan secara ringkas di bawah. Kami hanya menggunakan beberapa harta pusaka, kaedah sihir dan koleksi khusus.
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
Oleh itu, panggilan ini juga boleh dilakukan dalam contoh di atas:
b45e29b9125c2ab565b5526442437686
Periksa objek kosong
Sekiranya anda ingin mengeluarkan nama negara ke alamat seseorang, anda akan sering melihat kod berikut:
b45e29b9125c2ab565b5526442437686
Untuk mengelakkan ini, kami memasukkan pustaka stringhelper dan mengembalikan objek khas kelas kosong kosong jika model tidak dijumpai:
b45e29b9125c2ab565b5526442437686
Ini juga menjadikan panggilan berjaya (dalam contoh ini, jika ada sesuatu yang dijumpai, nama negara adalah output, 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
Kemudian kami membuat aplikasi file \ Helpers \ ConvenienceCollection.php , yang memastikan bahawa memanggil fungsi yang tidak diketahui dalam koleksi melaksanakan fungsi 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
Panggilan berikut hanya mengikut lokasi , walaupun itu bukan yang anda mahukan:
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