我需要获取由数据排序的表的最后10条记录,然后反转它们。
这是反向之前的代码:
$eventi = \App\Model::with('relation_1', 'relation_2')
->orderBy('data_ora', 'desc')
->take(10)
->get();
如果我记录结果,我会得到这个:
[{"id":12297,"stato_batteria":null,"data_ora":"2018-05-03 11:40:02" ...
反向代码是:
$eventi = \App\Model::with('relation_1', 'relation_2')
->orderBy('data_ora', 'desc')
->take(10)
->get()
->reverse();
如果我记录结果,我会得到这个:
{"9":{"id":1410,"stato_batteria":null,"data_ora":"2018-04-05 14:16:48" ...
正如您所看到的,该集合已更改,我不知道原因。
答案 0 :(得分:3)
使用此键重置键:
->reverse()->values();
答案 1 :(得分:1)
执行此操作时:
$eventi = \App\Model::with('relation_1', 'relation_2')
->orderBy('data_ora', 'desc')
->take(10)
->get();
你得到一个包含这些值的Collection
对象。底层数组中值的键将是数字,即0, 1, 2, ... 9
。现在你正在做的事情:
$eventi = \App\Model::with('relation_1', 'relation_2')
->orderBy('data_ora', 'desc')
->take(10)
->get()
->reverse();
您将以相反的顺序返回相同的集合。 reverse
方法会创建 new 集合,但会保留原始集合的键。因此,在这种情况下,您将看到最后一项,首先是密钥,9, 8, 7, ... 0
。在PHP中,如果数组键不是整数,则从0
开始按升序排列,它被假定为关联数组。因此,当您将集合作为JSON输出时,您会将其视为对象。
忽略集合中密钥的一种方法是使用values
,以便创建 new 集合(使用递增的数字键,即0, 1, 2, ... 9
),初始集合的值:
$eventi = \App\Model::with('relation_1', 'relation_2')
->orderBy('data_ora', 'desc')
->take(10)
->get()
->reverse()
->values();
答案 2 :(得分:0)
如laravel的集合文档中所述,当您将reverse
方法应用于集合时,集合顺序将会更改。
在这种情况下,您可以按data_ora
和desc
获取数据收集顺序,
当您在获取后应用reverse
时,这意味着您将撤消要由data_ora
排序的集合,但ASC
不是DESC
。
换句话说,收集的第一个元素将是最后一个......
在此处查看laravel文档reverse method