2014-07-04 94 views
0

我從Pragnesh Khalas得到了這個查詢,請問有人可以把它轉換成laravel查詢嗎?轉換查詢到Laravel

SELECT * FROM Position ORDER BY 
CASE WHEN position_value = 1 THEN created_at END ASC, 
CASE WHEN position_value = 2 THEN created_at END DESC 

我已經做到這一點,但仍然得到了錯誤信息

$position = Position::orderBy(DB::raw('(CASE WHEN position_value = 1 THEN created_at END asc, CASE WHEN position_value = 2 THEN created_at END desc)'))->paginate(29); 

這是錯誤消息

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'asc, CASE WHEN position_value = 2 THEN created_at END desc) asc limit 29 offset 0' at line 1 (SQL: select * from `position` order by (CASE WHEN position_value = 1 THEN created_at END asc, CASE WHEN position_value = 2 THEN created_at END desc) asc limit 29 offset 0) 

感謝

+1

爲什麼降低我的noob問題? :( – bambang

+0

試過刪除括號? – Unnawut

+0

問題似乎是,雄辯期望排序順序(asc,desc)作爲orderBy方法的第二個參數傳遞,就像'orderBy('created_at','desc')一樣。 ;'。 – Jeemusu

回答

2

刪除多餘的括號內使用orderByRaw方法

$position = Position::orderByRaw('CASE WHEN position_value = 1 THEN created_at END asc, CASE WHEN position_value = 2 THEN created_at END desc') 
      ->paginate(29); 
+0

謝謝(29); 我使用這個 $ position = Position :: orderByRaw('CASE WHEN position_value = 1 THEN created_at END asc,CASE WHEN position_value = 2 THEN created_at END') - > paginate(29); 我刪除了最後一個'desc'因爲它有它自己的默認值 – bambang

+0

我如何評論用適當的方式,語法從不h ighlights – bambang