【问题标题】:Laravel: Strange Behaviour With Two 'orderBys'Laravel:两个“orderBys”的奇怪行为
【发布时间】:2019-10-25 20:30:36
【问题描述】:

我正在尝试使用两个 orderBy,以便按其排序顺序(即 1、2 等)和名称过滤项目。

在 orderBys 的位置、升序和降序等方面,我几乎尝试了所有组合。

Laravel:

$product_types = ProductType::orderBy('sort_order', 'desc')->orderBy('name, 'asc)->paginate($per_page);

数据库表:

结果:

我希望“硬件”排在第一位,因为它的 sort_order 是 1,“办公用品”排在第二位,因为它的 sort_order 是 2,然后其他所有内容都按字母顺序从 a-z 排列。

【问题讨论】:

标签: php sql laravel


【解决方案1】:

Laravel 对 NULL 值排序有问题,你可以使用这两种解决方案之一来归档你想要的:

->orderBy(DB::raw('ISNULL(sort_order), sort_order'), 'ASC')

或:

->orderByRaw('ISNULL(sort_order), sort_order ASC');

为了最后获取 NULL 值,然后像往常一样连接 ->orderBy('name'...)

希望对你有帮助!

【讨论】:

    【解决方案2】:

    您可以使用COALESCE 函数,它将返回第一列不为空。见:

    $product_types = ProductType::orderBy(DB::raw("COALESCE(sort_order, name)"), "asc")
        ->paginate($per_page);
    

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 2018-05-27
      • 2014-10-23
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 2020-11-26
      相关资源
      最近更新 更多