2017-04-17 27 views
0

似乎无法让我的头排序拉拉维尔集合,所以empty/null数据将最终成为最后一个。 (有点混乱关于使用)通过留空/空排序拉拉维尔集合

我几乎所有的是一堆times/timestamps需要订购。某些行可能不适用于该列。

我想数据出现ASC/ascendingempty/null数据显示在最后。

$collection->sortBy('timestamp')排序很好,但不知道如何处理空的领域。

data

表看起来是这样的。

$data = $data->sort(function($a, $b) use ($sortBy) { 
     if ($a->{$sortBy} and $b->{$sortBy}) return 0; 
     return ($a->{$sortBy} > $b->{$sortBy}) ? -1 : 1; 
    }); 

随机代码我尝试从互联网,我无法正常工作。 $sortBy包含一个字段名称进行排序(因为它可能会更改) 错误代码处理空/空数据,但它的顺序无序。 faulty

+0

请添加您用于排序的代码。 –

回答

1

尝试:

$collection->sortBy('-timestamp')

是否行得通?

+0

这篇文章给了我想法,感谢我认为我得到了它的工作。我没有使用sortBy(' - timestamp'),而是为每个条目创建了另一个变量,例如:我默认赋予的timestamp_order,随机数为-10000,如果有任何数据,则该变量被覆盖(timestamp不为null或空)。然后按$ collection-> sortBy('timestamp_order')排序 – m4gix1

+0

我不喜欢这个想法,但很高兴它的工作:)如果我的建议不起作用,也许尝试使用CASE,如下面的例子: 'ORDER BY (CASE当时间戳IS NULL然后1 ELSE 0 END),时间戳 看看这里:http://stackoverflow.com/questions/5993109/order-by-asc-with-nulls-at-the-bottom –

+0

也不太喜欢这个想法,但由于我有很多关系atm和有限的时间框架来找出它,所以我排序收集。将随机数更改为Carbon :: now() - > addYear() - > toDateTimeString();相反,由于它们比任何其他时间戳更早,所以它们最后出现。 – m4gix1

0

我假设你的timestamp是unix时间戳。

您可以这样排序是:

$sorted = $collection->sortByDesc('timestamp'); 
+0

这不会是我想要实现的,我希望结果出现ASC/Ascending,而空/空数据最后。 – m4gix1

0

必须使用sort()和闭包。下面将在最后对NULL值进行排序。

$sorted = $collection->sort(function ($a, $b) { 
    if (!$a->timestamp) { 
     return !$b->timestamp ? 0 : 1; 
    } 
    if (!$b->timestamp) { 
     return -1; 
    } 
    if ($a->timestamp == $b->timestamp) { 
     return 0; 
    } 

    return $a->timestamp < $b->timestamp ? -1 : 1; 
});