Php laravel关系集合上的自定义排序
我有点被一些通常很直截了当的东西卡住了。我需要根据某个值和“排序顺序”数组将hasMany关系中的记录排序为自定义顺序 我下面的代码不起作用,因为我正在传递uSort()一个有说服力的集合,我不知道如何绕过它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)
$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之间你解决了我的问题,干杯!