2016-10-09 3 views
3

я могу использовать orderBy метод в Laravel так:Как использовать заказ в Laravel, когда он использует CASE WHEN?

$posts = Post::orderBy('id', 'DESC')->get(); 

Хорошо, что о том, когда есть в предложении ORDER BYCASE? Пример:

ORDER BY 
CASE 
    WHEN id.PinRequestCount <> 0 THEN 5 
    WHEN id.HighCallAlertCount <> 0 THEN 4 
    WHEN id.HighAlertCount <> 0 THEN 3 
    WHEN id.MediumCallAlertCount <> 0 THEN 2 
    WHEN id.MediumAlertCount <> 0 THEN 1 
END desc, 

Как я могу написать это^в Laravel?

ответ

3

Попробуйте это:

->orderByRaw(
    "CASE WHEN <CONDITION> THEN < > ELSE < > END DESC" 
) 
+0

Спасибо .. upvote .. только для моей информации, будет ли запрос сопоставляться на основе базы данных при использовании 'Raw'? Как вы знаете, когда вы используете 'Post :: orderBy ('id', 'DESC')', он работает для всех баз данных * (просто вам нужно изменить базу данных в конфигурации) *, теперь я хочу знать, будет он по-прежнему работает во всех базах данных, когда мы используем 'orderByRaw()'? – stack

+1

Нет проблем. Я не уверен, но я предполагаю, что он будет работать для всех СУБД. @stack – sagi

1

Вы должны использовать raw как Саги также упоминается.

$posts = Post::select(DB::raw 
('CASE 
    WHEN id.PinRequestCount <> 0 THEN 5 
    WHEN id.HighCallAlertCount <> 0 THEN 4 
    WHEN id.HighAlertCount <> 0 THEN 3 
    WHEN id.MediumCallAlertCount <> 0 THEN 2 
    WHEN id.MediumAlertCount <> 0 THEN 1 
END desc') 
)->orderBy('id', 'DESC')->get(); 
+0

Спасибо .. upvote – stack

+0

Приветствия! :) – Sina

Смежные вопросы