PHP Academy · Ders

Önden Yükleme ve Sorgu Kapsamları

Önden yüklemeyle N+1 sorgularını önleyin ve sorgu kapsamlarıyla mantığı yeniden kullanın.

4. ders / 413 adım

Önden Yükleme ve Sorgu Kapsamları, CoddyKit'te ücretsiz bir PHP Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, PHP Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. PHP Academy kursu toplamda 4 dersten oluşur.

N+1 Sorunu

Bir döngü içinde bir ilişkiye erişildiğinde tembel yükleme her model için bir sorgu çalıştırır — büyük ölçekte son derece maliyetlidir.

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

with() ile İstekli Yükleme

İlişkileri baştan, tek bir ek sorguyla istekli olarak yükleyerek N+1 sorununu çözün.

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

Birden Çok İlişkiyi İstekli Yükleme

Birden çok ilişkiyi aynı anda yükleyin.

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

İç İçe İstekli Yükleme

Nokta gösterimini kullanarak iç içe ilişkileri yükleyin.

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

Kısıtlı İstekli Yükleme

İstekli olarak yüklenen ilişkiye koşullar uygulayın.

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

withCount()

İlişkili modellerin kendilerini yüklemeden, ilişkili bir modelin sayısını yükleyin.

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

Tembel İstekli Yükleme (load())

Daha önce getirilmiş bir koleksiyondaki ilişkileri load() ile istekli olarak yükleyin.

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

Genel Sorgu Kapsamları

Genel kapsamlar, bir model için tüm sorgulara otomatik olarak kısıtlamalar ekler.

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

Yerel Sorgu Kapsamları

Yerel kapsamlar, model üzerinde scope ile başlayan yöntemler olarak tanımlanan yeniden kullanılabilir sorgu kısıtlamalarıdır.

<?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();

Kapsamları Birleştirme

Okunabilir ve yeniden kullanılabilir sorgu mantığı için birden çok yerel kapsamı zincirleyin.

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

Geliştirme Sırasında N+1'i Algılama

Geliştirme sırasında beklenmeyen sorgu sayılarını algılamak için Laravel Debugbar'ı kullanın veya DB::enableQueryLog() çalıştırın.

Özet

İlişkileri istekli olarak yüklemek ve N+1 sorgularını ortadan kaldırmak için with() kullanın. Sayılar için withCount() kullanın. Yeniden kullanılabilir ve okunabilir sorgu kısıtlamaları için yerel kapsamlar tanımlayın.

Hızlı Kontrol

N+1 sorununu çözmek için ilişkili modelleri istekli olarak hangi yöntem yükler?

Başlamak ücretsiz

Yapay zeka eğitmeniyle PHP öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
49
Dersler
195

Sıkça Sorulan Sorular

“Önden Yükleme ve Sorgu Kapsamları” dersi ücretsiz mi?

Evet — “Önden Yükleme ve Sorgu Kapsamları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve PHP Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. PHP Academy kursu toplamda 4 dersten oluşur.

“Önden Yükleme ve Sorgu Kapsamları” dersinde ne öğreneceğim?

Önden yüklemeyle N+1 sorgularını önleyin ve sorgu kapsamlarıyla mantığı yeniden kullanın. PHP Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

PHP Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te PHP Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Önden Yükleme ve Sorgu Kapsamları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu PHP Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her PHP Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Eloquent Modelleri ve Geçişler
  2. Eloquent ile CRUD
  3. Eloquent İlişkileri
  4. Önden Yükleme ve Sorgu Kapsamları
← PHP Academy Sayfasına Dön