2016-10-19 2 views
3

먼저, this을 보았습니다. 그러나 피벗 테이블이 포함되어 있으므로 솔루션을 얻을 수 없었습니다. 내 두뇌는 그 해답을 추상화 할 수 없었다.중첩 된 열의로드 관계에 의한 Laravel 순서

$orderLines = PurchasingOrderLine::where('season_id', '=', $seasonRecID) 
     ->with('factory') 
     ->with('purchasingFactoryDates.milestone') 
     ->with('divergedColors.purchasingColorDates.milestone') 
     ->get(); 

그래서 그것은 아주 큰 관계가있다 :

나는이 쿼리가 있습니다.

purchasingFactoryDatesmilestone의 "number"속성으로 정렬하고 싶습니다. 여기

은 ..이 작업을 수행하는 방법에 대한

{ 
    id: 1, 
    season_id: 258, 
    factory_id: 38, 
    archived: 0, 
    created_at: "2016-10-03 00:00:00", 
    updated_at: "2016-10-04 00:00:00", 
    factory: { 
     ID: 38, 
     name: "testfac", 
     address: "testadrr", 
     postCode: "", 
     city: "Foo", 
     countryID: 27, 
     podID: 2, 
     warehouse_id: 3, 
     paymentTermID: 11, 
     factoryCode: "Bazz", 
     active: 1 
    }, 
    purchasing_factory_dates: [ 
     { 
     id: 1, 
     purchasing_order_line_id: 1, 
     milestone_id: 1, 
     milestone_date: "1993-10-22 19:15:51", 
     milestone_status_id: 2, 
     created_at: "2016-10-04 07:38:30", 
     updated_at: "2016-10-18 19:15:51", 
     milestone: { 
      id: 1, 
      name: "test1", 
      description: null, 
      number: 1, 
      created_at: "-0001-11-30 00:00:00", 
      updated_at: "-0001-11-30 00:00:00" 
     } 
     }, 
    ......... 

모든 아이디어를이 쿼리 (샘플)에 대한 JSON 응답의 샘플입니다? 전체 관계가 Milestone.number으로 정렬되고 싶지 않으며 purchasingFactoryDates 만 정렬하면 안됩니다.

$orderLines = PurchasingOrderLine::where('season_id', '=', $seasonRecID) 
    ->select('purchasing_order_lines.*') 
    ->join('purchasing_factory_dates', 'purchasing_factory_dates.purchasing_order_line_id', '=', 'purchasing_order_lines.id') 
    ->join('milestone', 'purchasing_factory_dates.milestone_id', '=', 'milestone.id') 
    ->with('factory') 
    ->with('purchasingFactoryDates.milestone') 
    ->with('divergedColors.purchasingColorDates.milestone') 
    ->groupBy('purchasing_order_lines.id') 
    ->orderBy('milestone.number') 
    ->get(); 
+0

나는 당신이 그것을 위해 가입을 사용할 수 있다고 생각 : http://stackoverflow.com/questions/18861186/eloquent-eager-load-order-by – Sefran2

답변

0

보고.

$orderLines = PurchasingOrderLine::where('season_id', '=', $seasonRecID) 
    ->with('factory') 
    ->with(['purchasingFactoryDates' => function($q) { 
     $q->select('purchasingFactoryDates.*')->join('milestone', 'purchasingFactoryDates.milestone_id', '=', 'milestone.id')->orderBy('milestone.number'); 
    }, 'purchasingFactoryDates.milestone']) 
    ->with('divergedColors.purchasingColorDates.milestone') 
    ->get(); 
+0

이 단지의 모든 중앙으로 풍덩 수 내가 부르고있는 다른 "with"방법? – k4kuz0

+1

글쎄,하지만 이건 관계 내에서 밀스톤을 주문할 때가 아니라 마일스톤 번호에 의한 모든 레코드가 아니라는 것입니다. –

0

입니다

+1

이것은 FactoryStates와 함께 Milestones를 가져 왔으므로 지금까지 살펴본 가장 좋아하는 솔루션입니다. 솔루션을 가져 주셔서 감사합니다. – k4kuz0

+0

기다려. 이건 연혁별로 정렬되지 않았습니다. 번호? 마일스톤 번호에 1, 3, 10, 2가 있습니다. : – k4kuz0

+0

purchase_factory_dates.id 뒤에 여전히 정렬 된 것으로 보입니다 – k4kuz0

0

을 나는 이것이 당신이 있었다 다른 대답에 가까이 일치하는 원하는 것으로 생각 : 가장 쉬운 방법은 다음과 같이 쿼리를 결합하는 것입니다 Constraining eager loading

$orderLines = PurchasingOrderLine::with('purchasingFactoryDates'=>function($query) 
          { 
           $query->with(['milestone'=>function($query) 
            { 
             $query->orderBy('number'); 
            }]); 
          }]); 
+0

이것은 마일스톤 번호로 정렬하지 않습니다.이 여전히 나를 위해 purchasing_factory_date ID로 정렬합니다. – k4kuz0

+0

'-> with ('purchasingFactoryDates .milestone ')'. 어떻게 든이 정렬 우선? 그래서 그 의미에서, 나는 결과에 이정표를 얻지 않지만 purchasing_order_lines 제대로 정렬되어 있습니까? – k4kuz0