2015-02-09 56 views
0

正在挖掘相當一段時間,我沒有太多的代碼... :( 我想添加一個機制,將根據帖子評分在我的網站中對帖子進行排名/創建日期Laravel orderby評分/日期(評分)

所以基本上我需要的是一個查詢,得到post.created_at - (減去TIME(現在)值* 比ORDER BY 得分/ VALUE *降序

到目前爲止,我已經成功通過時間訂購/得分

$posts = Post::orderBy('score', 'DESC')->orderBy('created_at', 'DESC')->paginate(12);

+1

您需要解釋迄今爲止所做的工作有什麼問題。特別是 - 爲什麼從每個created_at中減去一個固定值(即現在)會改變你想要做的事情?根據我的描述,它不應​​該改變排序順序。 – 2015-02-09 16:59:26

+1

現在我擁有的是簡單的order by比較喜歡日期分數,我想在我的網站上創建一種更喜歡新帖子的排名方式,但是較高級別的舊帖子也會在頭版中看到。換句話說,按照一個計算得分/時間(作爲分數)排序表格= RANK – 2015-02-09 17:01:27

+1

明白了 - 建議查看Raw Expressions,但看起來您現在已經在下面得到了該效果的答案。 – 2015-02-09 17:17:28

回答

2

可以使用DB ::原始()函數來創建你的等級分數,然後在你的OrderBy方法使用它。

POST::select(DB::raw('(score/(created_at -NOW())) as "ordering_value", other, columns'))->orderBy("ordering_value", "desc"); 

我想你想要的是NOW() - created_at獲得那個職位的年齡。

+0

工程就像一個魅力!我唯一的問題,與這個問題無關,我應該如何用我的雄辯關係來完成這項工作? ( – 2015-02-09 18:17:18

+0

)您可以在定義關係時添加訂單子句,如:return $ this-> hasMany('stuff') - > orderBy('Foo'); – Needpoule 2015-02-10 08:15:56

+0

我一定會查看它,謝謝!:)已經用雄辯的selectRaw()修復了它; – 2015-02-10 14:30:16