-
라라벨 local scopes백엔드/laravel 2024. 1. 20. 17:49
로컬 스코프는 Eloquent 모델에서 특정 쿼리를 정의하고 재사용하기 위한 방법입니다.
이를 정의하기 위해서는 모델 클래스 내에 특정한 메서드를 만들어야 합니다.
로컬 스코프의 명명 규칙과 정의 방법을 알아보겠습니다.
1. 로컬 스코프 정의 방법
로컬 스코프는 모델 클래스 내의 메서드로 정의됩니다. 이 메서드는 scope 접두사로 시작해야 합니다.
public function scopeScopeName($builder, $parameter1, $parameter2, ...)
{
// 쿼리 빌더에 대한 로직을 작성
return $builder->where(...);
}- scopeName: 로컬 스코프의 이름. 이 이름은 스코프를 호출할 때 사용됩니다.
- $builder: 쿼리 빌더 인스턴스. 쿼리 빌더를 조작하여 스코프의 로직을 추가합니다.
- $parameter1, $parameter2, ...: 스코프에 전달되는 추가적인 매개변수 (선택 사항).
2. 로컬 스코프 호출 방법
로컬 스코프는 메서드 체인을 통해 호출하고, 호출할 때 scope 접두사를 생략하고 사용합니다.
Model::scopeName($parameter1, $parameter2)->get();
예를 들어, scopePublished라는 로컬 스코프를 호출할 때
Post::published()->get();
여기서 published()가 scopePublished를 호출한 것입니다.
3. 로컬 스코프의 사용 규칙
- 로컬 스코프 메서드는 항상 $builder를 첫 번째 매개변수로 받아야 합니다.
- 로컬 스코프는 쿼리 빌더 메서드를 사용하여 쿼리를 조작하고 반환해야 합니다.
- 필요에 따라 스코프에 추가적인 매개변수를 전달하여 동적으로 동작하게 할 수 있습니다.
예를 들어, is_published 컬럼이 true인 게시물만 가져오는 로컬 스코프는 다음과 같이 정의할 수 있습니다.
public function scopePublished($builder)
{
return $builder->where('is_published', true);
}이후 이를 사용하여 게시된 게시물을 조회할 수 있습니다.
$publishedPosts = Post::published()->get();
이어서 좀 더 복잡한 예시로, post 모델에서 user 테이블과의 조인 쿼리를 로컬 스코프로 정의해 보겠습니다.
public function scopeWithUserData($builder)
{
return $builder->join('users', 'posts.user_id', '=', 'users.id')
->select('posts.*', 'users.name', 'users.email');
}// 사용자 데이터와 함께 게시된(posted) 포스트 가져오기
$postsWithUserData = Post::withUserData()->published()->get();'백엔드 > laravel' 카테고리의 다른 글
Local Scopes 와 Dynamic Scopes 사이의 주요 차이 중 하나 (0) 2024.01.20 라라벨 dynamic scope. (0) 2024.01.20 라라벨 global scopes (2) 2024.01.20 라라벨 기존 모델의 복사본(replicate) 만들기 (1) 2024.01.20 라라벨 소프트 삭제(soft deleting)된 레코드를 주기적으로 삭제하기 (0) 2024.01.20