2017-05-10 2 views
1

나는 카운티와 거기에 관련있는 항목을 머리글 아래에 나열한 간단한 페이지가 있습니다. 이러한 항목은 approved이어야하므로 whereHas 메소드가 필요합니다.OrderBy on Eloquent whereHas relationship

나는 현재 다음과 같은 멋진 검색어가 있습니다.

$counties = County::whereHas('items', function ($query) { 
    $query->where('approved', 1); 
})->get(); 

반환 items

현재 그러나 나는 그들의 name 필드를 기준으로 알파벳 순으로 이러한 항목을 나열 할, 자신의 차 필드 id (이 보일 것입니다)에 의해 정렬됩니다.

다음 쿼리를 시도했지만 변경 사항이 없습니다. 어떤 조언을 주시면 감사하겠습니다.

$counties = County::whereHas('items', function ($query) { 
    $query->where('approved', 1)->orderBy('name'); 
})->get(); 

답변

0

를 얻을이 시도 :

@foreach($counties as $county) 
    @foreach($county->items->orderBy('name') as $item) 
      {{ $item->name }} 
    @endforeach 
@endforeach 

또는 카운티 모델에서 :

public function approvedItems(){ 
    return $this->hasMany(Item::class)->where('approved', 1)->orderBy('name'); 
} 

다음 :

컨트롤러 :

$counties = County::whereHas('approvedItems')->get(); 

보기 : 당신의 모델과 당신이 할 수있는 가장 가벼운 컨트롤러를 가지고에 대한 관계에서 작동하는

@foreach($counties as $county) 
    @foreach($county->approvedItems as $item) 
      {{ $item->name }} 
    @endforeach 
@endforeach 

하려고하면 lisibility에 얻을 것

+0

완벽한 감사합니다! – benmacgowan

3
$counties = County::whereHas('items', function ($query) { 
    $query->where('approved', 1); 
})->orderBy('name')->get(); 

나는 전에해야합니다, 당신은 하위 쿼리에 주문할 수 있습니다 생각하지 않는다 - 당신이 결과를 표시 할 때>

+0

나에게 돌아와 줘서 고마워. 불행히도이 명령은'items'보다는'county' 결과입니다. 이것을 달성하는 또 다른 방법이 있습니까? – benmacgowan