PHP

[Laravel/PHP] Scope ?

라임오렌지원 2022. 12. 12. 16:16

라라벨에서 Scope를 붙여서 사용하는 함수를 보았다.

따로 필터가 있는 것도 아닌데 Scope가 자동 처리되는 것 같아서 찾아보았다.

 


 

 

Laravel 프레임워크에서 Scope를 생성해서 이용하자.

 

라라벨은 일부 조건을 더 많이 재사용 해야 하는 상황이 발생할 수 있는데,

Laravel 모델에 Scope를 쉽게 통합할 수 있는 방법이 있다.

 

Laravel은 조건을 읽기 쉽고 재사용 가능한 문장(Scopes)으로 정리하는 솔루션을 제공한다.

 

 

 

 

#  Laravel 에서의 범위 작성

프로젝트 관리 애플리케이션을 구축하고 있으며, 다양한 위치에서 완료된 모든 프로젝트를 가져와야 한다고 가정한다.

다음 조건을 사용하여 완료된 프로젝트를 검색할 수 있다.

$completedProjects = Project::where('completed', 1) -> get();

 

 

애플리케이션 전반에 걸쳐 다양한 위치에서 위의 조건을 사용해야 할 수도 있다.

Laravel Scope를 사용하여 코드를 건조(?) 시킬 수 있다.

 

Scope는 모델에서 위와 같은 쿼리 실행에 사용되는 구문을 캡슐화하는 데 사용할 수 있는 메서드이다.

Scope는 다음과 같이 메서드의 이름 앞에 Scope를 붙여 정의한다.

class Project extends Model
{
    public function scopeCompleted($query)
    {
        return $query->where('completed', 1);
    }

}

위에서 정의한 범위에서는 다음과 같이 실행할 수 있다.

$completedProjects = Project::completed()->get();

 

 

 

# Laravel 에서의 동적 Scope 작성

그러나 이 범위를 동적으로 만들고, 완료되지 않은 프로젝트에서 완료하려면 인수를 지정할 수 있다.

다른 모델 메서드에서와 마찬가지로 입력 매개 변수를 정의하기만 하면 된다.

class Project extends Model {

    public function scopeCompleted($query, $arg)
    {
        return $query->where('completed', $arg);
    }
}

입력 파라미터를 정의하면 스코프를 다음과 같이 사용할 수 있다.

// Get completed projects
$completedProjects = Project::completed(1)->get();

// Get incomplete projects
$nonCompletedProjects = Project::completed(0)->get();

 

# 관계에서 Scope 사용

Scope를 관계와 함께 사용하는 경우가 많다.

예를 들어 사용자와 관련된 프로젝트 목록을 검색할 수 있다.

$user = User::findOrFail(1); // 1 is user id
$completedProjects = $user->projects()->completed(1)->get();

Laravel Scope는 몇 가지 반복적인 쿼리가 있고, 코드를 반복해서 재사용하려는 경우에 사용하는 것이 가장 좋다.

 


( 번역은 google 과 파파고를 이용했으며, 이상할 수도 있습니다. )

 

참고사이트

https://www.larashout.com/using-scopes-in-laravel

 

Using Scopes in Laravel | LaraShout

Sometimes you run into a situation when you have to reuse some of the conditions more, let's see how to easily integrates scopes in Laravel models.

www.larashout.com

 

728x90

'PHP' 카테고리의 다른 글

[PHP/Apache] geoip  (0) 2023.08.31
str_replace / preg_replace  (0) 2022.09.14
PHP Excel 라이브러리  (0) 2022.08.17
PHP 구성  (0) 2022.08.16
PHP 디자인 패턴  (0) 2022.08.15