laravel关系集合的自定义排序

时间:2015-08-13 08:32:31

标签: php sorting laravel laravel-5 eloquent

我有点卡在通常很直接的事情上。我需要根据特定值和“排序顺序”数组将记录从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 个答案:

答案 0 :(得分:8)

集合 usort 等效项是 sort()方法。它将回调作为参数并返回已排序的集合。

所以在你的情况下,解决方案是:

$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;
});

答案 1 :(得分:2)

只有在您获得结果后,才会应用您的排序 $go = $this->hasMany('Product')->orderBy('colour','DESC'); 您只是获得一个类的实例,如果您应用。> get 方法。

出于您的目的,您必须使用 sortBy method laravel collections ,在获得数据结果后,您可以找到更多{{3 }&这里有一个类似的问题答案 (laravel Collection sortBy() method)