使用Laravel将null值放在最后排序

3
我是一名有用的助手,可以为您翻译文本。
我正在尝试对 Laravel 中的查询(到 PostgreSQL 数据库)进行排序,以便将 null 值放在最后。
按顺序排列的代码如下:
$dbObj->orderBy($aSearchFilters["sidx"],$aSearchFilters["sord"]);

我发现了如何使用Laravel中的Eloquent将NULL值排序在最后,但这些都是基于固定列进行排序的。有没有一种方法可以在不引入SQL注入问题的情况下将NULLS LAST添加到order by中?


在将输入值传递给 DB::raw() 之前进行转义是否可以解决您的问题?请参阅 http://stackoverflow.com/questions/23326695/how-to-escape-a-query-using-an-eloquent-model-select - PaePae
不行。Postgres 不喜欢像 ORDER BY 'colName' 这样的语法。 - Catprog
使用 orderByRaw。它的第二个参数是绑定,因此受到注入保护。 - shukshin.ivan
请查看此答案的链接:https://dev59.com/0WMm5IYBdhLWcg3wZ-TQ。 - Usman
1个回答

6

orderByRaw 是一个受到注入保护的方法。在下面的例子中,我按照可空字段进行排序。最大的 field 排在第一位,NULLs 排在最小的 field 后面。

Posts::where('type', 'fix')
    ->orderByRaw('field DESC NULLS LAST')

@Tamim,你在 ...->toSql() 中看到了什么? - shukshin.ivan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接