September 28, 2024 laravel
Cara Order By Kolom Pivot di Laravel
Di laravel, untuk mengurutkan data berdasarkan kolom pada tabel pivot, bisa menggunakan method orderByPivot
.
$group = Group::find(1);
$group
->users()
->orderByPivot('created_at', 'asc')
->get();
Misalnya ada tabel users
dan groups
, users
berelasi many to many dengan groups
melalui tabel pivot group_user
.
select id, name from users;
+----+------+
| id | name |
+----+------+
| 1 | Jhon |
| 2 | Rudi |
| 3 | Doni |
| 4 | Anna |
+----+------+
select id, name from groups;
+----+-----------+
| id | name |
+----+-----------+
| 1 | Developer |
+----+-----------+
select * from group_user;
+----------+---------+---------------------+
| group_id | user_id | created_at |
+----------+---------+---------------------+
| 1 | 4 | 2024-09-28 15:12:11 |
| 1 | 3 | 2024-09-28 15:12:11 |
| 1 | 1 | 2024-09-24 15:12:11 |
| 1 | 2 | 2024-09-27 15:12:11 |
+----------+---------+---------------------+
Pada tabel group_user
terdapat kolom created_at
yang menandai kapan suatu user masuk ke group.
Lalu ingin ditampilkan semua data users pada group tertentu diurutkan berdasarkan tanggal masuk user pada group tersebut melalui kolom created_at
pada group_user
.
Caranya adalah dengan menggunakan method orderByPivot
diikuti dengan kolom pada pivot tabel yang ingin diurutkan.
$group = Group::find(1);
$group
->users()
->orderByPivot('created_at', 'asc')
->get();
Hasilnya.
[
{
id: 1,
name: "Jhon",
pivot: {
group_id: 1,
user_id: 1,
created_at: "2024-09-24 15:12:11",
},
},
{
id: 2,
name: "Rudi",
pivot: {
group_id: 1,
user_id: 2,
created_at: "2024-09-27 15:12:11",
},
},
{
id: 3,
name: "Doni",
pivot: {
group_id: 1,
user_id: 3,
created_at: "2024-09-28 15:12:11",
},
},
{
id: 4,
name: "Anna",
pivot: {
group_id: 1,
user_id: 4,
created_at: "2024-09-28 15:12:11",
},
},
],