Вот образец моей структуры базы данных:
id | name | role | login_status |
-----------------------------------------------
1 mark user 1
2 john lawyer 0
3 david user 0
4 erik lawyer 0
Я хочу упорядочить их таким образом, чтобы пользователи с ролью lawyer были в верхней части списка, за которыми следовали пользователи со значением 1 в столбце login_status.
Я использовал orderBy('login_status','desc') для столбца login_status, но у меня проблемы с состоянием столбца role.
ожидаемый результат:
- john
- erik
- mark
- david
Любая помощь будет оценена по достоинству. Спасибо.






Вы можете использовать UNION
select * from table where role='lawyer' order by login_status desc
UNION
select * from table where role!='lawyer' order by login_status desc
Вы можете использовать выражение case для своих критериев
->orderByRaw("CASE WHEN role ='lawyer' THEN 1 ELSE 0 END DESC")
->orderBy( 'login_status', 'DESC' );
Обычный sql будет похож
select *
from demo
order by CASE WHEN role ='lawyer' THEN 1 ELSE 0 END DESC, login_status DESC
Или вы можете сделать свой заказ еще короче, например
order by role ='lawyer' DESC, login_status DESC
Спасибо брат. Я использовал первое решение, которое вы дали, и оно сработало. :)
Разве у вас не может быть просто два заказа: один для роли, другой для login_status? Или это не сработает?