> 데이터 베이스 > MySQL 튜토리얼 > 방글라어 부분 쿼리 범위의 Laravel Eloquent ORM)

방글라어 부분 쿼리 범위의 Laravel Eloquent ORM)

Mary-Kate Olsen
풀어 주다: 2025-01-16 20:03:11
원래의
867명이 탐색했습니다.

Laravel Eloquent ORM in Bangla Part-Query Scopes)

Laravel Eloquent의 쿼리 범위 기능을 사용하면 재귀 쿼리를 메소드에 저장하여 코드를 재사용할 수 있습니다. 이는 특히 동일한 유형의 쿼리가 반복해서 필요할 때 코드를 훌륭하고 이해하기 쉽게 유지합니다. 쿼리 범위는 일반적인 쿼리를 메서드로 정의하여 모델 전체에서 사용할 수 있습니다.

1. 전역 범위

설명:

전역 범위는 항상 모델에 연결됩니다. 이 범위는 모델을 사용할 때 자동으로 작동하므로 매번 작성할 필요가 없습니다. 주로 로그인 상태, 활동 기록 등을 확인하는 데 사용됩니다.

전역 범위 만들기:

1. 전역 범위 클래스 만들기:

Laravel에서 Global Scope를 생성하기 위해서는 Scope 인터페이스를 구현한 클래스를 사용합니다.

<code class="language-php">use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class ActiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('active', 1);  // সক্রিয়  ফিল্টার
    }
}</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사

2. 모델에 전역 범위 연결:

모델의 booted() 메서드에 추가해야 합니다.

<code class="language-php">use App\Models\Post;
use App\Scopes\ActiveScope;

class Post extends Model
{
    protected static function booted()
    {
        static::addGlobalScope(new ActiveScope);
    }
}</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사

이제 Post::all()을 사용하면 active = 1 필터가 자동으로 적용됩니다.

3. 전역 범위를 일시적으로 생략:

<code class="language-php">use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class ActiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('active', 1);  // সক্রিয়  ফিল্টার
    }
}</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사

이렇게 하면 전역 범위가 일시적으로 삭제되고 active 필터를 제외한 모든 게시물이 반환됩니다.

2. 로컬 범위

설명:

로컬 범위는 모델 내에서 특정 쿼리 범위 역할을 하며 명시적으로 호출할 때만 적용됩니다. 전역 범위처럼 모든 쿼리마다 자동으로 적용되지는 않습니다.

로컬 범위 만들기:

첫 번째 인수 Builder가 입력되는 모델에 공개 메서드를 추가하여 로컬 범위를 만듭니다.

<code class="language-php">use App\Models\Post;
use App\Scopes\ActiveScope;

class Post extends Model
{
    protected static function booted()
    {
        static::addGlobalScope(new ActiveScope);
    }
}</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사

로컬 범위 사용:

<code class="language-php">$posts = Post::withoutGlobalScope(ActiveScope::class)->get();</code>
로그인 후 복사

로컬 범위에 매개변수 추가:

매개변수를 로컬 범위로 전달할 수 있습니다.

<code class="language-php">use App\Models\Post;

class Post extends Model
{
    // লোকাল  স্কোপ
    public function scopeActive($query)
    {
        return $query->where('active', 1);
    }

    public function scopeDraft($query)
    {
        return $query->where('status', 'draft');
    }
}</code>
로그인 후 복사

이제 status 매개변수와 함께 범위를 사용할 수 있습니다.

<code class="language-php">// সক্রিয়  পোস্ট  পেতে:
$posts = Post::active()->get();

// ড্রাফট  পোস্ট  পেতে:
$draftPosts = Post::draft()->get();

// চেইন  করে  ব্যবহার:
$activeDraftPosts = Post::active()->draft()->get();</code>
로그인 후 복사

'게시됨'이 매개변수입니다.

3. 동적 범위

동적 범위는 범위 이름을 동적으로 호출할 수 있는 로컬 범위의 한 유형입니다. Laravel에서는 scopeName() 유형 이름

을 사용할 수 있습니다.
<code class="language-php">class Post extends Model
{
    // লোকাল  স্কোপ
    public function scopeStatus($query, $status)
    {
        return $query->where('status', $status);
    }
}</code>
로그인 후 복사

이제 범위를 동적으로 호출할 수 있습니다.

<code class="language-php">$posts = Post::status('published')->get();</code>
로그인 후 복사

이는 scopePublished() 방법과 동일하게 작동합니다.

4. 다중 범위

여러 범위를 연결할 수 있습니다. 예를 들어 statusactive 범위를 함께 사용할 수 있습니다.

<code class="language-php">use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class ActiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('active', 1);  // সক্রিয়  ফিল্টার
    }
}</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사

active, status('published') 모두 적용됩니다.

5. 체인 가능한 범위

Eloquent의 로컬 스코프는 체인 가능하므로 여러 스코프를 동시에 사용할 수 있습니다.

<code class="language-php">use App\Models\Post;
use App\Scopes\ActiveScope;

class Post extends Model
{
    protected static function booted()
    {
        static::addGlobalScope(new ActiveScope);
    }
}</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사

스코프가 3개 있고 orderBy 1개가 연결되어 있습니다.

위 내용은 방글라어 부분 쿼리 범위의 Laravel Eloquent ORM)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿