【问题标题】:Order by as Number, even if column type is string, Laravel按数字排序,即使列类型是字符串,Laravel
【发布时间】:2021-07-16 16:55:36
【问题描述】:

我有一个字符串列,但我只有双数字(年龄),我想按顺序排序,但明显的问题是我得到了错误的响应,因为是字符串。例如:(1,10,2,3,4,40 等...)。在我的代码中 $table = 表的名称 sort_by,在这种特殊情况下是“年龄”。

$query->orderBy("CAST(" . $table . $request->sort_by . "as NUMERIC)", 'ASC');

错误:

未定义的表:7 错误:缺少表的 FROM 子句条目 “演员(人”↵LINE 1:

【问题讨论】:

    标签: laravel postgresql laravel-7


    【解决方案1】:

    使用orderByRaw 并将文本编号转换为整数:

    $query->orderByRaw("age::int")
    

    请注意,如果您一直需要将此文本数字列用作实际的数字数据,则可能意味着设计问题,并且该列在您的 Postgres 表中可能确实应该是整数。

    【讨论】:

    • 不幸的是,它已经投入生产了一段时间。我试过 " $query->orderByRaw('people.age::double', $direction); " //int, float ,我得到 "parameter was not defined"
    • 这不是我的回答所暗示的,orderByRaw 采用 single 原始字符串输入。请尝试使用我的实际答案。
    • 我尝试了精确的代码,但我得到了一个错误,因为我也有浮点值,我将“int”替换为“float”,并且工作正常。谢谢!
    • 好的...听起来那列应该是某种数字类型。如果您长期需要这种东西,也许可以做出改变。
    【解决方案2】:

    因为我使用的是 Mongodb 和 elqouent ORM,所以这对我来说很好

    $query->orderBy("age::int")
    

    【讨论】:

      猜你喜欢
      • 2020-11-30
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多