Eloquent Relations: Mengurutkan Data di Laravel 5

Eloquent Relations: Mengurutkan Data di Laravel 5

Mengolah data dalam sebuah aplikasi merupakan perkara umum dan banyak digunakan, sebab fungsi dari sebuah aplikasi adalah mempermudah dalam mengelola data yag dimiliki oleh pemilik aplikasi tersebut. Ingat! Aplikasi bertujuan untuk mempermudah, bukan mempersulit penggunanya dan makna dari "mempermudah", salah satunya adalah melakukan sort data.

Sering kali, pengguna ingin melihat data yang telah diurutkan seperti: Dimulai dari data terbaru hingga yang paling lama ataupun sebaliknya. Hal ini tentu bukan sebuah masalah yang berarti, karena dapat diselesaikan dengan mudah menggunakan query database atau pada Laravel, lebih dimudahkan lagi dengan method orderBy(). Namun, pertanyaannya, bagaimana jika data yang akan diurutkan berada pada sebuah table yang berelasi? Ditambah lagi, data tersebut berada pada child table?

Baca Juga: Custom Email Template Notification

Filter Data With Eloquent

Menariknya Laravel memiliki sebuah fitur yang bernama eloquent, selain mempermudah dalam memanipulasi database juga memiliki fitur yang sangat powerful. Untuk memahami cara kerja dari sort data yang berelasi ini menggunakan eloquent, maka case yang akan kita gunakan adalah menampilkan post yang telah diurutkan, dimana table post bereleasi dengan table user dengan ketentuan bahwa table post sebagai child table.

Umumnya yang akan dilakukan adalah membuat sebuah method di eloquent untuk mendefinisikan table yang berelasi, kurang lebih seperti ini:

public function post()
{
    return $this->hasMany('App\Post');
}

Harapannya, pada controller ketika kita melakukan hal berikut maka data seharusnya sudah bisa diurutkan (baca: Ascending):

\App\User::with('post')->orderBy('posts.created_at')->get();

Tapi, ternyata yang ditemukan adalah error

Maka Laravel memperkenalkan sebuah method yang bernama latest(). So, buka model App/User.php kemudian buat method baru:

public function latestPost()
{
    return $this->hasMany('\App\Post')->latest();
}

Dengan menggunakan method baru tersebut, maka seharusnya kita sudah bisa melakukannya dengan pendekatan seperti ini:

\App\User::with('latestPost')->get()->sortByDesc('latestPost.created_at');

Tadaaa, Hasil yang kita inginkan pun telah diperoleh dengan ketentuan menampilkan data post yang telah diurutkan secara descending. Mungkin kamu bertanya-tanya, fungsi yang mana sih yang bekerja untuk mengurutkan data? Yap, sortByDesc. Laravel telah menyediakan sebuah method yang dapat digunakan untuk mengurutkan data, sebut saja: sortBy dan sortByDesc .

Category:
Share:

Comments