2016-08-12 3 views
0

у меня есть этот красноречивый призыв:Eloquent выбрать из массива в том же порядке

$array = [100, 200, 50, 3, 300]; 
$response = EloquentModel::whereIn('id', $array)->get(); 

, но теперь я хочу, чтобы результаты быть порядок в том же порядке, в котором заказана массив; так что результат должен быть как:

0 => Obj(
    [id] => 100 
    [name] => name100 
) 
1 => Obj(
    [id] => 200 
    [name] => name200 
) 
2 => Obj(
    [id] => 50 
    [name] => name50 
) 
3 => Obj(
    [id] => 3 
    [name] => name3 
) 
.... 

Порядок определяется как переменный $ массива это упорядоченные элементы ...

Можно ли сделать что-то подобное в красноречиве?

+0

Без использования ДБ: строка .. –

ответ

0

Итак, решение выглядит следующим образом:

 $response = EloquentModel::whereIn('id', $array)->get()->sortBy(function($item, $index) use($array){ 
      $arrayToSortBy = array_flip($array); 
      return $arrayToSortBy[$item->id]; 
    }); 

В принципе, мы можем сортировать Eloquent:Collections ответ.

array_flip переворачивает ключи со значениями, так что мы можем вернуть соответствующий номер для заказа ....

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