Salah satu kelebihan Laravel adalah sintaksisnya yang elegan. Jika Anda memiliki banyak model dan relasi di Laravel (karena banyaknya tabel di database), traversing sering kali berakhir dengan kode yang kurang elegan. Seiring waktu, tiga ekstensi kecil telah terbukti berhasil bagi saya, yang ingin saya perkenalkan secara singkat di bawah. Untuk melakukan ini kita 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
Panggilan ini juga dimungkinkan dalam contoh di atas:
b45e29b9125c2ab565b5526442437686
Periksa benda kosong
Jika Anda ingin menampilkan nama negara untuk alamat seseorang, Anda sering melihat kode berikut.:
b45e29b9125c2ab565b5526442437686
Untuk mencegah hal ini, kami menyertakan pustaka stringhelper dan mengembalikan objek khusus dari kelas kosong `empty` jika model tidak ditemukan.:
b45e29b9125c2ab565b5526442437686
Ini berarti panggilan berhasil (dalam contoh ini, jika sesuatu ditemukan, nama negara akan ditampilkan, dalam semua kasus lainnya 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
Selanjutnya, kita membuat file app\Helpers\ConvenienceCollection.php , yang memastikan bahwa ketika fungsi yang tidak dikenal dipanggil dalam Koleksi, fungsi tersebut akan dieksekusi 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
Perintah berikut hanya mengurutkan berdasarkan lokasi , meskipun itu mungkin bukan hasil yang diinginkan.:
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