在 Octobercms 前端结果不遵守数组顺序
On Octobercms frontend results does't respect array order
我正在使用带有转发器字段的 yaml 文件 select 后端的某些类别。
然后在部分我使用:
$categories = \...\..\Category::whereIn('id', $categories)->get();
$this['categories'] = $categories;
然后在前面我使用:
{% for category in categories%}
{{ category.name }}
{% endfor %}
一切正常,我在前端获得了数组变量 $categories 的所有类别。问题是无论我是否更改数组顺序结果顺序总是相同的。例如这个数组:
$categories = [1, 2, 3, 4, 5];
给出与此数组相同的顺序结果:
$categories = [4, 1, 2, 5, 3];
有没有办法让它遵守数组顺序?
取决于您的订购方式。使用 Laravel 集合对数组进行排序。 Twig 将打印升序排列的数字索引。 [5,4,2,3,1]
的结果总是 [1,2,3,4,5]
。所以一个 Laravel 集合有 [0, 1, 2]
你可以使用 ->sortBy
方法来切换哪个模型实例攻击索引。
所以您可能有一个包含名称字段的模型。您的第一个记录名称是 John,最后一个名称是 Adam。 Twig 会将 John 展示给 Adam。使用 ->sortBy('name')
将显示按字母顺序升序排列的列表。
[0=>['name'=>'John'], 1=>['name'=>'Zack'], 2=>['name'=>'Adam']]
//Using ->sortBy('name') becomes:
[0=>['name'=>'Adam'], 1=>['name'=>'John'], 2=>['name'=>'Zack']]
如果您使用的是 mysql,则可以根据您传递 ID 的顺序轻松自定义顺序。
$categories = [4,5,1,3];
$sortedCategories = \...\..\Category::whereIn('id', $categories)
->orderByRaw(\DB::raw("FIELD(id," . implode(',', $categories) . ")"))
->get();
it will created sort on FIELD(id, 4,5,1,3)
assuming $categories = [4,5,1,3]
and your records will be sorted like that.
客户端
Or if you are using SQlite
then FIELD sort is not available
. alternatively if you have small amount of records
you can sort it client side using collection helper method sortBy
.
$category = [1,2,4,5,3];
$categories = \...\..\Category::whereIn('id', $categories)->get();
$sortedCategories = $categories
->sortBy(function ($item) use ($category) {
return array_search($item->id, $category);
});
dd($sortedCategories); // sorted based on $category = [1,2,4,5,3]
如有疑问请评论
我正在使用带有转发器字段的 yaml 文件 select 后端的某些类别。
然后在部分我使用:
$categories = \...\..\Category::whereIn('id', $categories)->get();
$this['categories'] = $categories;
然后在前面我使用:
{% for category in categories%}
{{ category.name }}
{% endfor %}
一切正常,我在前端获得了数组变量 $categories 的所有类别。问题是无论我是否更改数组顺序结果顺序总是相同的。例如这个数组:
$categories = [1, 2, 3, 4, 5];
给出与此数组相同的顺序结果:
$categories = [4, 1, 2, 5, 3];
有没有办法让它遵守数组顺序?
取决于您的订购方式。使用 Laravel 集合对数组进行排序。 Twig 将打印升序排列的数字索引。 [5,4,2,3,1]
的结果总是 [1,2,3,4,5]
。所以一个 Laravel 集合有 [0, 1, 2]
你可以使用 ->sortBy
方法来切换哪个模型实例攻击索引。
所以您可能有一个包含名称字段的模型。您的第一个记录名称是 John,最后一个名称是 Adam。 Twig 会将 John 展示给 Adam。使用 ->sortBy('name')
将显示按字母顺序升序排列的列表。
[0=>['name'=>'John'], 1=>['name'=>'Zack'], 2=>['name'=>'Adam']]
//Using ->sortBy('name') becomes:
[0=>['name'=>'Adam'], 1=>['name'=>'John'], 2=>['name'=>'Zack']]
如果您使用的是 mysql,则可以根据您传递 ID 的顺序轻松自定义顺序。
$categories = [4,5,1,3];
$sortedCategories = \...\..\Category::whereIn('id', $categories)
->orderByRaw(\DB::raw("FIELD(id," . implode(',', $categories) . ")"))
->get();
it will created sort on
FIELD(id, 4,5,1,3)
assuming$categories = [4,5,1,3]
and your records will be sorted like that.
客户端
Or if you are using
SQlite
thenFIELD sort is not available
. alternatively if you havesmall amount of records
you can sort itclient side using collection helper method sortBy
.
$category = [1,2,4,5,3];
$categories = \...\..\Category::whereIn('id', $categories)->get();
$sortedCategories = $categories
->sortBy(function ($item) use ($category) {
return array_search($item->id, $category);
});
dd($sortedCategories); // sorted based on $category = [1,2,4,5,3]
如有疑问请评论