2016-12-19 3 views
0

Я получил это:Laravel сортировать по дополнительному полю

$companies = Company::all(); 

foreach($companies as $company) 
{ 
    $company->distance = distance(); // a float type. My custom field. 
} 

$companies->sort(function ($a, $b){ 
      return strcmp($a->distance, $b->distance); 
     })->values()->all(); 

Я также попытался: $companies->sortBy('distance')

И некоторые другие способы, которые не работают.

У любого есть идея, как это сделать? Благодаря

ответ

0

Хорошо, я понял.

$sorted = $companies->sortBy('distance'); 
$sorted->values()->all(); 

$companies = $sorted; 

Возможно, мне нужен буфер, когда он сортируется.

0

попробуйте следующий код:

$companies = Company::all()->toArray(); 

foreach($companies as $key => $company) 
{ 
    $distance[$key] = $company["distance"] = distance(); 
} 

//now do a multisort on your distance array 

array_multisort($distance, SORT_ASC, $data); 

для получения более подробной информации, обратитесь к http://php.net/manual/en/function.array-multisort.php