집 >데이터 베이스 >MySQL 튜토리얼 >방글라어 부분 쿼리 범위의 Laravel Eloquent ORM)
Laravel Eloquent의 쿼리 범위 기능을 사용하면 재귀 쿼리를 메소드에 저장하여 코드를 재사용할 수 있습니다. 이는 특히 동일한 유형의 쿼리가 반복해서 필요할 때 코드를 훌륭하고 이해하기 쉽게 유지합니다. 쿼리 범위는 일반적인 쿼리를 메서드로 정의하여 모델 전체에서 사용할 수 있습니다.
전역 범위는 항상 모델에 연결됩니다. 이 범위는 모델을 사용할 때 자동으로 작동하므로 매번 작성할 필요가 없습니다. 주로 로그인 상태, 활동 기록 등을 확인하는 데 사용됩니다.
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
필터를 제외한 모든 게시물이 반환됩니다.
로컬 범위는 모델 내에서 특정 쿼리 범위 역할을 하며 명시적으로 호출할 때만 적용됩니다. 전역 범위처럼 모든 쿼리마다 자동으로 적용되지는 않습니다.
첫 번째 인수 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>
'게시됨'이 매개변수입니다.
동적 범위는 범위 이름을 동적으로 호출할 수 있는 로컬 범위의 한 유형입니다. 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()
방법과 동일하게 작동합니다.
여러 범위를 연결할 수 있습니다. 예를 들어 status
및 active
범위를 함께 사용할 수 있습니다.
<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')
모두 적용됩니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!