라라벨에서 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
'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 |