Я создаю систему регистрации нескольких рулонов. И я пытаюсь перечислить все существующие ролики. Они должны быть отсортированы по мере увеличения количества разрешений, которые они назначили им. (в этом примере: сначала пользователь, второй модератор и третий админ) Я не могу определить рулоны в коде, потому что можно создавать новые рулоны и существующие рулоны можно удалить. (за исключением роли пользователя и администратора)Laravel weird behavior orderByRaw (поле())
Я получаю количество разрешений всех доступных рулонов и размещаю их в массиве с идентификатором рулона.
массив per_count возвращает следующие идентификаторы:
2, 4, 3
идентификаторов:
- 2 = Пользователь
- 3 = Администратор
- 4 = Ведущий
Однако, Когда я выполняю следующий запрос:
Roll::orderByRaw("FIELD(id, ?)", array($per_count))->get()
Он изменяет порядок, и я получаю
- 3 Администратор
- 4 Модератор
- 2 Пользователь
Контроллер:
public function index()
{
// Check if user is authorized to use this action, else redirect to login page
$this->authorize_action(__FUNCTION__, $this->classname);
foreach (Roll::all() as $roll) {
$rollpermission['id'] = $roll->id;
$rollpermission['count'] = $roll->permissions->count();
$permission[] = $rollpermission;
}
$this->array_sort_by_column($permission, 'count');
$per_count = array();
foreach ($permission as $per) {
$per_count[] = $per['id'];
}
$foo = implode(', ', array_fill(0, count($per_count), '?'));
return view('roll')
->with('roll', Roll::orderByRaw("FIELD(id, " . $foo . ") desc", array_reverse($per_count))->get());
}
Мне удалось заставить его корректно работать с функцией array_reverse. Однако он неряшлив и не нужен. И я не могу найти причину, по которой запрос меняет результаты. Может кто-нибудь объяснить мне, почему результаты отменены? Спасибо
Попробуйте использовать 'DB: : enableSqlLog() ', затем выполните запрос Roll, затем' dd (DB :: getQueryLog()) ', чтобы вывести фактический sql. –
Результат «выберите * из' roll' order by FIELD (id,?) « –
Есть ли какие-либо параметры? Они будут в другом индексе из запроса. –