Trik untuk Laravel Eloquent Relationships

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

Kembali