Eloquent: CRUD & Query

Membuat, membaca, mengubah, dan menghapus data; filter, urutan, paginasi, agregat, updateOrCreate.

Part 11 dari 26 ± 45 menit Gratis

Membuat data (Create)

$produk = new Produk();
$produk->nama = 'Kopi Arabika';
$produk->harga = 85000;
$produk->save();

$produk = Produk::create([            // mass assignment (butuh #[Fillable])
    'kategori_id' => 1,
    'nama' => 'Kopi Arabika',
    'slug' => 'kopi-arabika',
    'harga' => 85000,
]);

Membaca (Read)

Produk::all();                                 // SEMUA baris (hati-hati pada tabel besar)
Produk::find(1);                               // by id → model atau null
Produk::findOrFail(1);                         // 404 otomatis bila tidak ada
Produk::where('slug', 'kopi-arabika')->first();
Produk::firstWhere('slug', 'kopi-arabika');
Produk::where('stok', '>', 0)
    ->where('aktif', true)
    ->orderByDesc('created_at')
    ->limit(20)
    ->get();                                     // Collection model

Query dibangun dengan rantai method (query builder) dan baru dijalankan saat memanggil get(), first(), paginate(), count(), dst.

Filter yang sering dipakai

->where('harga', '>=', 50000)
->whereIn('kategori_id', [1, 2, 3])
->whereBetween('harga', [10000, 50000])
->whereNull('deskripsi')
->where('nama', 'like', "%{$kata}%")
->orWhere('slug', $kata)
->where(function ($q) use ($kata) {          // pengelompokan kondisi
    $q->where('nama', 'like', "%{$kata}%")->orWhere('deskripsi', 'like', "%{$kata}%");
})
->when($request->filled('kategori'), fn ($q) => $q->where('kategori_id', $request->kategori))

Urutan, paginasi, agregat

->orderBy('nama')  ->orderByDesc('harga')  ->latest()  ->oldest()
->paginate(10);                 // objek paginator + tautan halaman ({{ $produk->links() }})
->simplePaginate(10);           // lebih ringan (hanya prev/next)
Produk::count();  Produk::sum('stok');  Produk::avg('harga');  Produk::max('harga');  Produk::min('harga');
Produk::where('aktif', true)->exists();

Mengubah (Update)

$produk = Produk::findOrFail($id);
$produk->update(['harga' => 90000]);         // mass assignment
$produk->harga = 90000; $produk->save();     // atau satu per satu

Produk::where('stok', 0)->update(['aktif' => false]);   // update massal (tidak memicu event model)

Create atau update sekaligus

Produk::firstOrCreate(['slug' => 'kopi-arabika'], ['nama' => 'Kopi Arabika', 'harga' => 85000]);
Produk::updateOrCreate(['slug' => 'kopi-arabika'], ['harga' => 90000]);   // ada → update, tidak → buat
Produk::upsert($baris, ['slug'], ['harga']);   // massal & efisien (uniqueBy wajib diisi di Laravel 13)

Menghapus (Delete)

$produk->delete();
Produk::destroy([1, 2, 3]);
Produk::where('aktif', false)->delete();

Collection & chunk

get() mengembalikan Collection dengan banyak method fungsional: map, filter, pluck('nama'), sum('harga'), groupBy, sortBy. Untuk memproses jutaan baris tanpa menghabiskan memori: Produk::chunk(500, fn ($grup) => ...) atau cursor().

Melihat SQL

Produk::where(...)->toSql() atau ->dd() / ->dump() membantu belajar SQL apa yang dihasilkan.

Query Builder tanpa model

use Illuminate\Support\Facades\DB;
DB::table('produks')->where('stok', '>', 0)->get();
DB::transaction(function () { /* semua berhasil atau semua batal */ });

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X