2017-02-22 2 views
0

을 laravel주문 컬렉션 및 관계 컬렉션 내가 laravel 쿼리 다음 한

$user = $this->user; //current user (dispatcher) 

    //obtain list of dispatchers,trucks,deliveries,drivers,trailers 
    $dispatchers = $this->instance->user()->where('active', 1)->with(['truck.delivery' => function($query) use ($week_array) { 
          $query->where('delivery_date', '>=', Carbon\Carbon::parse($week_array[1]['date'])->toDateTimeString())->whereNotNull('driver_id') 
          ->orderBy('delivery_date'); 
         }])->with(['truck.trailer', 'truck.driver', 'truck.driver2', 'truck.trailer.trailerType'])->get() 
        ->sortBy('name')->sortBy(function ($item) use ($user) { 
     return $item->id == $user->id ? 1 . $item->name : 2 . $item->name; 
    }); 

내 목표는 컬렉션의 첫 번째 항목이 될 현재 사용자를 가지고있다, 그리고, 나는 알파벳 순으로 정렬이 컬렉션을 갖고 싶어 사용자 이름

또한 문제가 발생하여 각 사용자의 드라이버 (하위 집합의 하위 집합)를 사전 순으로 정렬해야합니다.

전체 컬렉션의 레벨 1

정렬 : $user fist, and then by $dispatchers->name

정렬 수준이 컬렉션의 각 항목에 대해이 : 현재 사용자가있는 경우 $dispatchers->truck->driver->first-name

내가 (레벨 1에 대한 일종의을 만들 수 있었다 항상 온다 상단), 각 사용자에 대한 컬렉션을 정렬 할 수 없습니다.

최종 결과는 그것은 나를 위해 작동 (드라이버 컬렉션 드라이버 이름으로 정렬 순서 사용자와 트럭 컬렉션)

CURRENT USER (not matter the name) 
Truck 50 
    Driver AA 
Truck 45 
    Driver BB 
Truck 56 
    Driver CC 

USER A 
Truck 10 
    Driver A 
Truck 6 
    Driver B 
Truck 20 
    Driver C 

USER B 
Truck 2 
    Driver D 
Truck 3 
    Driver E 
Truck 1 
    Driver F 

USER C 
Truck 30 
    Driver G 
Truck 35 
    Driver H 
Truck 13 
    Driver Z 

enter image description here

답변

0
$user = $this->user; //current user (dispatcher) 

//obtain list of dispatchers,trucks,deliveries,drivers,trailers 
$dispatchers = $this->instance->user()->where('active', 1) 
    ->with([ 
     'truck' => function ($query) { 
      $query->select(['trucks.*']); 
      $query->join('drivers', 'trucks.id', '=', 'drivers.truck_id'); 
      $query->oldest('drivers.name'); 
     }, 
     'truck.delivery' => function($query) use ($week_array) { 
      $query 
       ->where('delivery_date', '>=', Carbon\Carbon::parse($week_array[1]['date'])->toDateTimeString()) 
       ->whereNotNull('driver_id') 
       ->orderBy('delivery_date'); 
    }]) 
    ->with(['truck.trailer', 'truck.driver', 'truck.driver2', 'truck.trailer.trailerType'])->get() 
    ->sortBy('name')->sortBy(function ($item) use ($user) { 
     return $item->id == $user->id ? 1 . $item->name : 2 . $item->name; 
    }); 

같이해야한다 귀하의 경우에는 확실하지 않습니다.