Eloquent menyediakan ratusan method, tetapi pekerjaan sehari-hari sebenarnya berputar pada puluhan method inti yang sama. Chapter ini mengumpulkan method-method tersebut menjadi kartu contekan per kelompok: pengambilan data, penyaringan, agregasi, penyimpanan, hingga operasi relationship. Konsep di balik tiap kelompok sudah dibahas tuntas di section Eloquent ORM dan Eloquent Relationships , jadi di sini kita fokus pada bentuk singkatnya yang siap dilirik cepat.

Satu hal yang perlu diingat saat membaca kartu ini: hampir semua method penyaringan dan pengurutan mengembalikan query builder, bukan hasil. Query baru benar-benar dieksekusi saat kita memanggil method penutup seperti get(), first(), count(), atau paginate(). Karena itu method-method tersebut bisa dirantai sebebasnya — Tugas::where('status', 'todo')->latest()->limit(5)->get() — tanpa mengeksekusi satu pun query di tengah rantai. Pemahaman pola ini menjelaskan sekaligus perbedaan Tugas::find(1) (langsung query) dan Tugas::where(...) (menunggu get()).

Pengambilan Data #

MethodMengembalikanCatatan
all()Collection seluruh barisTanpa filter; hindari di tabel besar
find($id)Model atau nullMenerima array untuk banyak ID
findOrFail($id)Model atau 404Idiom wajib di controller show
first()Baris pertama hasil query atau nullGabungan where + limit
firstWhere('kolom', $nilai)Baris pertama yang cocokVersi ringkas where(...)->first()
value('kolom')Nilai satu kolom baris pertamaTanpa memuat model penuh
pluck('kolom')Collection nilai satu kolompluck('nama', 'id') set kunci
chunk(100, fn)Potongan 100 barisHemat memori untuk tabel besar
lazy()LazyCollectionAlternatif modern chunk

Penyaringan, Urutan, dan Batas #

MethodContoh singkatPadanan Course
where / orWherewhere('status', 'todo')Membaca Data
whereIn / whereNotInwhereIn('id', [1, 2])—
whereBetweenwhereBetween('harga', [100, 500])—
whereNull / whereNotNullwhereNull('deleted_at')—
whereDate / whereMonthwhereDate('created_at', '2026-01-01')—
orderBy / orderByDescorderByDesc('created_at')—
latest / oldestlatest('updated_at')—
inRandomOrderacak untuk sampling—
limit / offsetlimit(10)->offset(20)—

Dengan agregasi, satu baris lagi lengkap: count(), sum('kolom'), avg('kolom'), min('kolom'), max('kolom'), serta exists() dan doesntExist() — dua-duanya mengembalikan boolean tanpa memuat baris. Untuk hasil berhalaman, paginate(15) dan simplePaginate(15) sudah dibahas di Pagination .

Penyimpanan dan Penghapusan #

MethodPerilakuKapan dipakai
create([...])Buat baris dalam satu panggilanWajib $fillable
$m->fill([...]); $m->save()Isi lalu simpan model di memoriPerlu ID model sebelum simpan
update([...]) (query)Massal di semua baris cocokTanpa event model
$m->update([...])Simpan perubahan satu modelMemicu event
firstOrCreate([...])Cari; buat bila tak adaData acuan/reference
updateOrCreate([...], [...])Update; buat bila tak adaUpsert satu baris
increment / decrementNaik/turunkan kolom numerikCounter tanpa race
delete() / destroy($id)Hapus model / baris by ID—
forceDelete()Hapus permanen model soft deleteSoft Deletes

Mari kita lihat beberapa method tersebut bekerja dalam satu sesi nyata pada tabel tugas berisi tiga baris. Kode berikut dijalankan di sandbox Course ini:

php
echo Tugas::count() . PHP_EOL;                       // 3
echo Tugas::firstWhere('status', 'done')->judul . PHP_EOL;
echo Tugas::where('status', 'todo')->value('judul') . PHP_EOL;
echo Tugas::pluck('judul')->implode(', ') . PHP_EOL;

Tugas::updateOrCreate(
    ['judul' => 'Belajar Laravel'],      // kunci pencarian
    ['status' => 'done'],               // nilai yang diperbarui
);
echo Tugas::where('status', 'todo')->count() . PHP_EOL;

Output yang Dihasilkan:

text
3
Kirim laporan
Belajar Laravel
Belajar Laravel, Kirim laporan, Review kode
1

Perhatikan dua baris terakhir: updateOrCreate menemukan baris “Belajar Laravel” lalu mengubah statusnya menjadi done, sehingga jumlah baris berstatus todo turun dari dua menjadi satu. Pasangannya firstOrCreate tidak akan mengubah baris yang ditemukan — method ini hanya membuat baris baru bila pencarian kosong, ideal untuk data acuan seperti kategori. Detail per step-nya dibedah di Memperbarui Data dan Membuat Data .

Definisi Relationship #

Semua relasi didefinisikan sebagai method di model, dan konvensi penamaan Laravel membuat kita jarang menulis foreign key secara manual: method komentar() di model Post otomatis diasumsikan memakai kolom post_id di tabel komentar. Konvensi ini bisa diganti dengan argumen kedua dan ketiga bila skema database kita memakai nama lain — pembahasan lengkapnya di One to Many dan Many to Many .

MethodRelasiContoh
hasOneOne-to-onereturn $this->hasOne(Profil::class)
hasManyOne-to-manyreturn $this->hasMany(Komentar::class)
belongsToInverse one-to-manyreturn $this->belongsTo(User::class)
belongsToManyMany-to-manyreturn $this->belongsToMany(Tag::class)
morphMany / morphOnePolymorphicreturn $this->morphMany(Komentar::class, 'komentarable')
morphToInverse polymorphicreturn $this->morphTo()

Operasi Relationship #

MethodRelasi targetEfek
$post->comments()->save($komentar)hasManySimpan model + isi foreign key
$post->comments()->createMany([...])hasManyBuat banyak baris terkait
$komentar->post()->associate($post)belongsToSet FK tanpa query
$komentar->post()->dissociate()belongsToNol-kan FK
$post->tags()->attach([1, 2])belongsToManyTambah baris pivot
$post->tags()->detach([1])belongsToManyHapus baris pivot
$post->tags()->sync([1, 2, 3])belongsToManySamakan pivot persis
$post->tags()->toggle([2])belongsToManyHidupkan/matikan

Seluruh operasi ini dibahas dengan data lengkap di Relationship Operations .

Scope dan Eager Loading #

Dua senjata penata query yang menutup kartu ini. Local scope merangkum filter yang sering dipakai: definisikan method scopeBulanIni($query) di model, lalu panggil Tugas::bulanIni()->get() — detailnya di Query Scopes . Adapun with('relasi') memuat relasi di muka untuk mencegah masalah N+1, withCount('relasi') menambahkan kolom hitungan, dan has('relasi') menyaring model yang punya relasi — ketiganya dibedah di Eager Loading dan Mencegah N+1 .

Model mengurus data; lapisan berikutnya yang menampilkannya adalah template. Kartu contekan untuk lapisan itu tersedia di Referensi Blade , dan satu tingkat lebih ke belakang — lapisan yang mengantarkan request sampai ke controller — dirangkum di Referensi Routing .