Пользовательская сортировка в коллекции отношений laravel

Я немного застрял на чем-то, что обычно довольно прямолинейно. Мне нужно отсортировать записи из отношения hasMany в пользовательский порядок на основе определенного значения и массива "порядок сортировки".

мой код ниже не работает, потому что я передаю uSort() красноречивую коллекцию, и я не уверен, как ее обойти.

$go = $this->hasMany('Product')->orderBy('colour','DESC');

$order = array('RED', 'GREEN', 'BLUE', 'YELLOW');

usort($go, function ($a, $b) use ($order) {
    $pos_a = array_search($a->colour, $order);
    $pos_b = array_search($b->colour, $order);
    return $pos_a - $pos_b;
});

return $go;

может быть, мне не хватает какого-то удивительного волшебного помощника laravel, но я застрял. Любые мысли или советы были бы много ценю!

Ура

2 ответов


на usort эквивалентно коллекция - это сортировка() метод. Он принимает обратный вызов в качестве параметра и возвращает отсортированную коллекцию.

Итак, в вашем случае решение:

$go = $go->sort(function ($a, $b) use ($order) {
  $pos_a = array_search($a->colour, $order);
  $pos_b = array_search($b->colour, $order);
  return $pos_a - $pos_b;
});

ваша сортировка будет применяться только после того, как вы получите результат здесь $go = $this->hasMany('Product')->orderBy('colour','DESC'); вы просто получаете экземпляр класса, который вернется, может вернуть ваш результат, если вы примените get метод.

для вашей цели вы должны использовать sortBy method of laravel collections после того, как вы получите результат ваших данных вы можете найти более (laravel Collection sortBy () метод) & вот ответ на вопрос для вас https://stackoverflow.com/a/28202985