Php laravel关系集合上的自定义排序

Php laravel关系集合上的自定义排序,php,sorting,laravel,laravel-5,eloquent,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)

我有点被一些通常很直截了当的东西卡住了。我需要根据某个值和“排序顺序”数组将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;
也许我错过了一些神奇的拉威尔魔法助手,但我被卡住了。任何想法或建议将不胜感激


干杯

集合相当的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('color','DESC')
您只是得到一个类的实例,如果对其应用
get
方法,该类将返回您的结果


出于您的目的,您必须使用
进行排序,在获得数据结果后,您可以找到更多信息&这里有一个类似的问题答案

您能否像
print\r($go)一样发布
$go
的数组结构
由于关系函数必须返回关系,因此在将其移到关系定义之外后,此操作与预期输出一起起作用。谢谢你的好例子!感谢您提供有关在关系功能之外应用此功能的信息。在你和jedrzej之间你解决了我的问题,干杯!