2017-02-22 6 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

Сортировать уровень 2 для каждого элемента в коллекции: $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; 
    }); 

Это работает для меня , но не уверен в вашем случае.

Смежные вопросы