reverse() on querybuilder get() 改变收集结果
reverse() on querybuilder get() changes the collection results
我需要获取按数据排序的 table 的最后 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" ...
如您所见,集合已更改,我不知道为什么。
如 laravel 的集合文档中所述,当您将 reverse
方法应用于集合时,集合顺序将发生变化。
在您的情况下,您通过 data_ora
和 desc
、
获得数据收集顺序
当你在 get 之后应用 reverse
时,这意味着你将反转要按 data_ora
但 ASC
而不是 DESC
.
排序的集合
换句话说,集合的第一个元素将是最后一个...
在此处查看 laravel 文档 reverse method
使用此重置键:
->reverse()->values();
当你这样做时:
$eventi = \App\Model::with('relation_1', 'relation_2')
->orderBy('data_ora', 'desc')
->take(10)
->get();
您会得到一个 Collection
object,其中包含这些值。基础数组中值的 keys 将是数字,即 0, 1, 2, ... 9
。现在当你在做的时候:
$eventi = \App\Model::with('relation_1', 'relation_2')
->orderBy('data_ora', 'desc')
->take(10)
->get()
->reverse();
您将得到相同的 collection,但顺序相反。 reverse
方法创建了一个 new collection,但保留了原始 collection 的键。所以在这种情况下,您将首先看到最后一项,并且键将是 9, 8, 7, ... 0
。在 PHP 中,如果您的数组键不是整数,则从 0
开始按升序排列,它被假定为关联数组。因此,当您将 collection 输出为 JSON 时,您会看到它表示为 object.
忽略 collection 中的键的一种方法是使用 values
,这样就会创建一个 new collection(用升序数字键,即 0, 1, 2, ... 9
),仅具有初始值 collection:
$eventi = \App\Model::with('relation_1', 'relation_2')
->orderBy('data_ora', 'desc')
->take(10)
->get()
->reverse()
->values();
我需要获取按数据排序的 table 的最后 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" ...
如您所见,集合已更改,我不知道为什么。
如 laravel 的集合文档中所述,当您将 reverse
方法应用于集合时,集合顺序将发生变化。
在您的情况下,您通过 data_ora
和 desc
、
当你在 get 之后应用 reverse
时,这意味着你将反转要按 data_ora
但 ASC
而不是 DESC
.
换句话说,集合的第一个元素将是最后一个...
在此处查看 laravel 文档 reverse method
使用此重置键:
->reverse()->values();
当你这样做时:
$eventi = \App\Model::with('relation_1', 'relation_2')
->orderBy('data_ora', 'desc')
->take(10)
->get();
您会得到一个 Collection
object,其中包含这些值。基础数组中值的 keys 将是数字,即 0, 1, 2, ... 9
。现在当你在做的时候:
$eventi = \App\Model::with('relation_1', 'relation_2')
->orderBy('data_ora', 'desc')
->take(10)
->get()
->reverse();
您将得到相同的 collection,但顺序相反。 reverse
方法创建了一个 new collection,但保留了原始 collection 的键。所以在这种情况下,您将首先看到最后一项,并且键将是 9, 8, 7, ... 0
。在 PHP 中,如果您的数组键不是整数,则从 0
开始按升序排列,它被假定为关联数组。因此,当您将 collection 输出为 JSON 时,您会看到它表示为 object.
忽略 collection 中的键的一种方法是使用 values
,这样就会创建一个 new collection(用升序数字键,即 0, 1, 2, ... 9
),仅具有初始值 collection:
$eventi = \App\Model::with('relation_1', 'relation_2')
->orderBy('data_ora', 'desc')
->take(10)
->get()
->reverse()
->values();