0Pricing
PHP Academy · Pelajaran

Pemuatan Awal dan Scope Kueri

Cegah kueri N+1 dengan pemuatan awal dan gunakan kembali logika dengan scope kueri.

Pemuatan Awal dan Scope Kueri adalah pelajaran PHP Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar PHP Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus PHP Academy mencakup 4 pelajaran total.

Masalah N+1

Pemuatan malas menjalankan satu kueri per model saat mengakses relasi di dalam perulangan — hal ini dapat menjadi bencana pada skala besar.

<?php
$posts = Post::all(); // 1 query
foreach ($posts as $post) {
    echo $post->author->name; // 1 query per post = N+1 total!
}

Pemuatan Awal dengan with()

Atasi N+1 dengan memuat relasi terlebih dahulu dalam satu kueri tambahan.

<?php
$posts = Post::with("author")->get(); // 2 queries total
foreach ($posts as $post) {
    echo $post->author->name; // no extra query
}

Pemuatan Awal Beberapa Relasi

Muat beberapa relasi sekaligus.

<?php
$posts = Post::with(["author", "tags", "comments"])->get();

Pemuatan Awal Bersarang

Muat relasi bersarang menggunakan notasi titik.

<?php
$posts = Post::with("comments.author")->get();
// Loads posts, their comments, and each comment's author

Pemuatan Awal Terbatas

Terapkan kondisi pada relasi yang dimuat terlebih dahulu.

<?php
$posts = Post::with(["comments" => function ($q) {
    $q->where("approved", true)->latest();
}])->get();

withCount()

Muat jumlah model terkait tanpa memuat model terkait itu sendiri.

<?php
$posts = Post::withCount("comments")->get();
foreach ($posts as $post) {
    echo $post->comments_count;
}

Pemuatan Awal Malas (load())

Muat relasi terlebih dahulu pada koleksi yang sudah diambil dengan load().

<?php
$posts = Post::all();
// Later, when you know you need the authors:
$posts->load("author");

Cakupan Kueri Global

Cakupan global secara otomatis menambahkan batasan ke semua kueri untuk suatu model.

<?php
class PublishedScope implements \Illuminate\Database\Eloquent\Scope {
    public function apply(Builder $builder, Model $model): void {
        $builder->where("is_published", true);
    }
}

Cakupan Kueri Lokal

Cakupan lokal adalah batasan kueri yang dapat digunakan ulang, yang ditentukan pada model sebagai metode dengan awalan scope.

<?php
class Post extends Model {
    public function scopePublished(Builder $query): void {
        $query->where("is_published", true);
    }
    public function scopeByUser(Builder $query, int $userId): void {
        $query->where("user_id", $userId);
    }
}
// Usage:
Post::published()->byUser(1)->latest()->get();

Menggabungkan Cakupan

Rangkai beberapa cakupan lokal untuk logika kueri yang mudah dibaca dan dapat digunakan ulang.

<?php
$posts = Post::published()
             ->byUser(auth()->id())
             ->orderBy("created_at", "desc")
             ->paginate(15);

Mendeteksi N+1 dalam Pengembangan

Gunakan Laravel Debugbar atau jalankan DB::enableQueryLog() untuk mendeteksi jumlah kueri tak terduga selama pengembangan.

Ringkasan

Gunakan with() untuk memuat relasi terlebih dahulu dan menghilangkan kueri N+1. Gunakan withCount() untuk menghitung jumlah. Tentukan cakupan lokal untuk batasan kueri yang dapat digunakan ulang dan mudah dibaca.

Pemeriksaan Singkat

Metode mana yang memuat model terkait terlebih dahulu untuk mengatasi N+1?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pemuatan Awal dan Scope Kueri” gratis?

Ya — teks lengkap “Pemuatan Awal dan Scope Kueri” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus PHP Academy, upgrade ke CoddyKit PRO. Kursus PHP Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pemuatan Awal dan Scope Kueri”?

Cegah kueri N+1 dengan pemuatan awal dan gunakan kembali logika dengan scope kueri. Kamu berlatih PHP Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai PHP Academy?

Tidak diperlukan pengalaman sebelumnya. PHP Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Pemuatan Awal dan Scope Kueri” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran PHP Academy ini?

Ya. Setiap pelajaran PHP Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Model dan Migrasi Eloquent
  2. CRUD dengan Eloquent
  3. Relasi Eloquent
  4. Pemuatan Awal dan Scope Kueri
← Kembali ke PHP Academy