2017-05-21 1 views
0

내 Laravel 응용 프로그램에 다음 모델이 있습니다.
사용자, 비즈니스, 프로필, 구독.
사용자에게는 하나의 비즈니스가 있고 비즈니스는 하나의 프로필과 많은 구독을 갖습니다. 내 구독 컨트롤러에서Laravel : 각 쿼리에서 필터링하지 않고 사용자 레코드 만 반환하는 똑똑한 방법이 있습니까?

구독이 같은 것을 추가 내게 필요한 사용자 로그인 아래로 당겨하는 데 사용 내 방법의 많은 다음

Subscription::where('business_id', '=', Auth::user()->business->id)->active()->get(); 

하나 개의 쿼리에서이 문제가되지 않을 수 있지만, 내가 가진 비즈니스 구독 레코드를 가져오고 알기를 원하는 많은 방법은 비즈니스 레코드 만 가져 오는 더 똑똑한 방법이며 쿼리에 추가 범위를 추가하는 것입니다.

$subs = Auth::user()->business->subscriptions()->active()->get(); 

->subscriptions() 부분은 쿼리를 반환하고 당신이 그것을에 체인 추가 범위를 할 수 있습니다

+0

사용자가 비즈니스가 하나 뿐인 이유는 가입 ID를 비즈니스 ID와 연결하는 이유는 무엇입니까? – adelineu

+0

앞으로 여러 사용자에게 사업을 할당 할 수 있습니다. – Imran

+1

예, 이해합니다. 그렇더라도 그것은 유스 케이스와 나머지 워크 플로우에 달려있다. 이러한 종류의 쿼리를 만드는 대신 관계를 사용해보십시오. https://laravel.com/docs/5.4/eloquent-relationships – adelineu

답변

0

당신이 구독 및 비즈니스 사이 Laravel 관계를 가정하면, 다음과 같이이 쿼리를 다시 작성할 수 있습니다.

+0

여기서 비즈니스 오브젝트가 필요 없으므로'business' 대신'business()'를 사용해야한다. – Sandeesh

+0

'business()'가 모델이 아닌 쿼리 객체를 반환하므로 제대로 작동하지 않을 것이라고 확신합니다. 쿼리 개체는 모델과 관계가 없습니다. 그리고 관련 구독을 얻으려면 사실 'id'비즈니스를 알아야합니다. 또한'-> business'를 사용하면 다시 쿼리 할 필요가 없습니다. 만약 당신이 어딘가에서'비지니스 '를로드했다면 말이죠. – devk

0

관계가 올바르게 설정된 경우 다음 중 하나를 수행 할 수 있습니다.

$subscriptions = auth()->user()->business()->subscriptions()->active()->get(); 

$subscriptions = Subscription::whereHas('business', function ($query) { 
    $query->where('user_id', auth()->id()); 
})->active()->get();