如何更改Eloquent集合中的结果顺序?

时间:2016-03-21 11:49:48

标签: php arrays sorting laravel eloquent

我有一个返回类别名称的表。我获取所有记录,但问题是它有一条我想要区别对待的记录,"其他水果"。我想让它最后显示出来。

例如,当我从数据库中获取记录时:

Category::where('parent_category_id',  $data)->where('is_active', 1)->lists('name', 'id');

它返回的集合如下所示:

Illuminate\Support\Collection Object
(
    [items:protected] => Array
        (
            [27] => Apple
            [346] => Other Fruits
            [350] => Papaya & Pomegranate
            [377] => Banana
            [438] => Orange & Sweet Lime
        )
)

如何移动"其他水果"项目是最后一个?

2 个答案:

答案 0 :(得分:0)

嘿,只需使用两个规则并获得两个集合

$category = Category::where('parent_category_id',  $data)->where('is_active', 1)->lists('name', 'id');
$other = << use your rule correctly >>

然后在您的视图中使用此集合

foreach($category as .....)
foreach($other as ....)

答案 1 :(得分:0)

你可以尝试这样的事情。

$categoriesExceptOtherFruits = Category::where('parent_category_id',  $data)
        ->where('is_active', 1)
        ->where('id', '<>', $otherFruitsId);

$allCategories = Category::where('parent_category_id',  $data)
        ->where('is_active', 1)
        ->where('id', $otherFruitsId)
        ->union($categoriesExceptOtherFruits)
        ->lists('name', 'id');

如果您的other类别较少,请使用like代替<>

另一种解决方案是在表格中创建sort列,然后使用orderBy('sort', 'asc')

当然,您可以手动重新收集收集。