【发布时间】:2021-07-18 01:33:47
【问题描述】:
我有一个 Products 表
产品:id、标题、库存、价格
我希望新产品位于列表顶部(首页),但我也希望库存为 0 的产品位于列表末尾(最后一页)
显然,这不符合我的要求,0库存的新产品仍然会首先出现
Product::orderBy('id' , 'desc')->orderBy('stock' , 'desc')->paginate(20)
有很多类似的问题,但似乎都是关于对我不起作用的空值.. 我也试过了
->orderByRaw('stock = 0', 'ASC', 'id' , 'desc' )->paginate(20)
按照建议,但我得到一个空集合
这是一个分页查询,必须在数据库中进行排序,从数据库中读取集合后对集合进行排序是行不通的
------------------------------------ 编辑 ---------- --------------------------
我试过这个代码
Product::orderByRaw('stock = 0', 'ASC')
->orderBy('id' , 'desc')
->get()
这将在调试器中生成此查询
select * from `products` order by stat_view = 0, `id` desc
当我直接在数据库中尝试时,此代码将起作用,但由于某种原因,在 laravel 中我得到一个空集合....这是一个使用 laravel 5.2 的旧网站,不确定这是否与问题
【问题讨论】:
-
你可以使用
sortByDesc()方法作为Product::orderBy('id' , 'desc')->get()->sortByDesc('stock'); -
@EsTeAa 对不起我的错,我必须更清楚......这是一个分页,所以在查询后对集合进行排序是行不通的
-
您实际上可以对分页记录进行排序。有关更多信息,请参阅this answer。您可以在集合上使用sort 方法来提供您的自定义排序功能。与 PHP 的内置 uasort 函数完全一样。