2015-02-09 92 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