$projects = Project::find(collect(request()->get('projects'))->pluck('id')); // collect(...)->pluck('id') is [2, 1]
$projects->pluck('id'); // [1, 2]
我希望结果按原始顺序显示。我该如何实现?
答案 0 :(得分:0)
尝试$projects->order_by("updated_at")->pluck("id");
或"created_at"
(如果您需要对它们进行排序)
答案 1 :(得分:0)
引用MySQL order by field in Eloquent和MySQL - SELECT ... WHERE id IN (..) - correct order,您可以使用以下方法获得结果并将其排序:
x3::standard_wide::space
@Jonas使我意识到了潜在的sql注入漏洞,所以我建议一种替代方法:
$projects_ids = request()->get('projects'); //assuming this is an array
$projects = Project::orderByRaw("FIELD(id, ".implode(',', projects_ids).")")
->find(projects_ids)
->pluck('id'));
上面的解释是这样的:
创建一个逗号分隔的占位符'?',用于数组中用作命名绑定的项数(包括列'id')。
答案 2 :(得分:0)
我通过逐个查询数据而不是批量查询来解决这个问题。
$ids = collect(request()->get('projects'))->pluck('id');
foreach($ids as $id){
$projects[] = Project::find($id);
}
$projects = collect($projects);
$projects->pluck('id');
我必须手动执行此操作,因为 laravel 集合映射了所有使用 id 排序的元素。