2017-01-14 13 views
2

조인 또는 하위 쿼리를 사용하여 둘 이상의 모델간에 Laravel의 로컬 범위를 사용할 수 있는지 알고 싶었습니까?Laravel 5.2 지역 범위가있는 웅변 쿼리

예를 들어이 범위는 활성 인 사용자 모델입니다.

class User extends Model 
{ 
    public function scopeActive($query) 
    { 
     return $query->where('active', 1); 
    } 
} 

기타 모델은 범위가있는 UserSubscription입니다.

class UserSubscription extends Model 
{ 
    public function scopeType($query, $type) 
    { 
     return $query->where('type', $type); 
    } 
} 

단일 쿼리에서 두 범위를 모두 사용하는 방법은 무엇입니까? 다음 진술은 효과가 없습니다.

$users = Users::active() 
     ->join('UserSubscription', 'users.id', '=','UserSubscription.user_id') 
     ->UserSubscription::type() 
     ->get(); 

저는 Laravel 5.2를 사용하고 있습니다. https://laravel.com/docs/5.3/eloquent#local-scopes

답변

0

당신이 바로 두 모델 클래스에서 모델 관계를 만든 경우,이 같은 쿼리를 만들 수 있습니다 : 사실

$users= User::where('active', 1)->whereHas('user_subscriptions', function ($query) { 
    $query->where('type', $type); 
})->get(); 
+0

, 내가 때문에 성능 문제의 Laravel 모델 관계를 사용하지 않습니다. 또한, 나는 지역 범위를 활용하고 싶다. 즉 $ users = Users :: active() -> join ('user_subscriptions', 'users.id', '=', 'user_subscriptions.user_id') -> UserSubscription :: type() -> get(); @ lewis4u –

+0

그러나 내가 아는 범위는 웅변에 근거합니다. 그리고 당신이 웅변적인 성능 문제를 가진 예제 또는 링크를 게시 할 수 있는지 알고 싶습니다. – lewis4u