Parçacıklara Dön
LaravelPHP

Laravel Eloquent Sorgu Kapsamları

Daha temiz ve ifade gücü yüksek Eloquent sorguları için yeniden kullanılabilir sorgu kapsamları.

laraveleloquentscopequery
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    class=class="text-emerald-400">"text-gray">// Local scope — called as Post::published()
    public function scopePublished(Builder 400">$query): Builder
    {
        return 400">$query->whereNotNull(class=class="text-emerald-400">"text-emerald-400">'published_at')
                     ->where(class=class="text-emerald-400">"text-emerald-400">'published_at', class=class="text-emerald-400">"text-emerald-400">'<=', now());
    }

    class=class="text-emerald-400">"text-gray">// Scope with parameter
    public function scopeByCategory(Builder 400">$query, string 400">$category): Builder
    {
        return 400">$query->where(class=class="text-emerald-400">"text-emerald-400">'category', 400">$category);
    }

    class=class="text-emerald-400">"text-gray">// Search scope
    public function scopeSearch(Builder 400">$query, ?string 400">$term): Builder
    {
        if (!400">$term) return 400">$query;

        return 400">$query->where(function (Builder 400">$q) use (400">$term) {
            400">$q->where(class=class="text-emerald-400">"text-emerald-400">'title', class=class="text-emerald-400">"text-emerald-400">'like', class="text-emerald-400">"%{400">$term}%")
              ->orWhere(class=class="text-emerald-400">"text-emerald-400">'content', class=class="text-emerald-400">"text-emerald-400">'like', class="text-emerald-400">"%{400">$term}%");
        });
    }
}

class=class="text-emerald-400">"text-gray">// Usage: Post::published()->byCategory(class=class="text-emerald-400">"text-emerald-400">'tech')->search(400">$request->q)->paginate(10);

Nasıl Kullanılır

Modelinizde scopeMethodName olarak kapsamları tanımlayın. Laravel bunları zincirlemenize izin verir: Post::published()->byCategory('tech')->paginate(). Controller'ları temiz tutar ve sorguları uygulama genelinde yeniden kullanılabilir yapar.

İlgili Teknoloji

Laravel

Aklınızda Bir Proje mi Var?

Fikrinizi nasıl hayata geçirebileceğimizi konuşalım. İlk konseptten üretime hazır ürüne kadar — yanınızdayız.

veya ücretsiz görüşme ayarlayın