Ссылка MySQL упорядочить по полю в Eloquent и MySQL - SELECT ... WHERE ID IN (..) - правильный порядок Вы можете в значительной степени получить результат и получить его порядок используя следующее:
$projects_ids = request()->get('projects'); //assuming this is an array
$projects = Project::orderByRaw("FIELD(id, ".implode(',', projects_ids).")")
->find(projects_ids)
->pluck('id'));
@ Jonas повысил мою осведомленность о потенциальной уязвимости SQL инъекций, поэтому я предлагаю альтернативу:
$projects_ids = request()->get('projects');
$items = collect($projects_ids);
$fields = $items->map(function ($ids){
return '?';
})->implode(',');
$projects = Project::orderbyRaw("FIELD (id, ".$fields.")", $items->prepend('id'))
->find($projects_ids);
Объяснение вышесказанному таково:
Создайте разделенный запятыми заполнитель '?' Для количества элементов в массиве, который будет служить именованным связыванием (включая столбец 'id').