Salah satu kekuatan Laravel adalah sintaksnya yang elegan. Jika Anda memiliki banyak model dan relasi di Laravel (karena banyak tabel dalam database), traverse seringkali dapat berakhir dengan kode yang kurang elegan. Seiring berjalannya waktu, tiga ekstensi kecil telah membuktikan diri untuk saya, yang ingin saya perkenalkan secara singkat di bawah ini. Kami hanya menggunakan beberapa warisan, metode ajaib dan koleksi khusus.
Pertama kita membuat model baru di app \ ConvenienceModel.php:
b45e29b9125c2ab565b5526442437686
Kemudian kami membiarkan semua model mewarisi dari ConvenienceModel baru kami:
b45e29b9125c2ab565b5526442437686
Gabungkan fungsi Anda sendiri dengan hubungan
Jika Anda ingin menghubungkan model, Anda menggunakan sintaks standar untuk memanggilnya:
b45e29b9125c2ab565b5526442437686
Jika Anda sekarang menambahkan logika bisnis Anda sendiri, Anda ingin menggunakan notasi huruf besar kecil (lebih rendah):
b45e29b9125c2ab565b5526442437686
Kami ingin menstandarkan sintaks dari kedua varian. Untuk melakukan ini, kami menambahkan metode ajaib __call ke ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Oleh karena itu, panggilan ini juga dimungkinkan dalam contoh di atas:
b45e29b9125c2ab565b5526442437686
Periksa benda kosong
Jika Anda ingin menampilkan nama negara ke alamat pribadi, Anda akan sering melihat kode berikut:
b45e29b9125c2ab565b5526442437686
Untuk mencegah hal ini, kami menyertakan pustaka stringhelper dan mengembalikan objek khusus dari kelas kosong kosong jika model tidak ditemukan:
b45e29b9125c2ab565b5526442437686
Ini juga membuat panggilan berhasil (dalam contoh ini, jika sesuatu ditemukan, nama negaranya adalah keluaran, dalam kasus lain string kosong).
b45e29b9125c2ab565b5526442437686
Jika kami juga ingin menutupi kasus bahwa pengguna dengan ID 42 mungkin tidak ada, kami juga akan membangun fungsi pembantu kecil untuk ini.:
b45e29b9125c2ab565b5526442437686
Panggilan berikut dengan demikian mengirimkan string kosong bahkan jika pengguna tidak ada sama sekali:
b45e29b9125c2ab565b5526442437686
Lintasi relasi n: m dengan mudah
Terakhir, kami ingin menyederhanakan kode berikut:
b45e29b9125c2ab565b5526442437686
Untuk ini kami menggunakan kemungkinan koleksi khusus . Kami pertama kali memperluas model kenyamanan:
b45e29b9125c2ab565b5526442437686
Kemudian kita membuat aplikasi file \ Helpers \ ConvenienceCollection.php , yang memastikan bahwa memanggil fungsi yang tidak dikenal dalam koleksi menjalankan fungsi untuk semua item dalam koleksi:
b45e29b9125c2ab565b5526442437686
Jadi kita dapat menggunakan kode berikut untuk menampilkan semua nama dari semua negara dari semua alamat semua orang tua orang tersebut:
b45e29b9125c2ab565b5526442437686
Tetapi panggilan seperti berikut ini juga dimungkinkan:
b45e29b9125c2ab565b5526442437686
Urutkan berdasarkan beberapa kolom
Panggilan berikut hanya mengurutkan berdasarkan lokasi , meskipun itu mungkin bukan yang Anda inginkan:
b45e29b9125c2ab565b5526442437686
Untuk mengaktifkan penyortiran menurut beberapa kolom, kami memperluas ConvenienceCollection kami:
b45e29b9125c2ab565b5526442437686
Dengan itu kita bisa mengurutkan koleksi menurut beberapa kolom dengan:
b45e29b9125c2ab565b5526442437686
Penyortiran standar
Kami memperluas ConvenienceCollection dengan fungsi tambahan lainnya:
b45e29b9125c2ab565b5526442437686
Sekarang Anda dapat memberikan masing-masing model fungsi pengurutan standar:
b45e29b9125c2ab565b5526442437686
Jadi kita bisa menyortir koleksi dengan:
b45e29b9125c2ab565b5526442437686
Nama objek
Setiap model mengimplementasikan metode getLabel (getName bervariasi tergantung modelnya):
b45e29b9125c2ab565b5526442437686
Dengan ini Anda dapat dengan cepat dan mudah menampilkan nama suatu objek. Anda kemudian dapat mengimplementasikan metode helper sortByLabel di ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Hasil kosong
Jika langkah perantara kosong, fungsi Laravel first () dan last () biasanya mengembalikan nol. Oleh karena itu kami perkenalkan getFirst () dan getLast () sehingga panggilan berikut selalu berhasil:
b45e29b9125c2ab565b5526442437686
Dengan ini kami mengirimkan kembali bantuan __empty_x yang dikenali __x:
b45e29b9125c2ab565b5526442437686