【问题标题】:Laravel 5, orderByRaw using field and column doesn't existsLaravel 5,使用字段和列的 orderByRaw 不存在
【发布时间】:2017-11-01 19:25:54
【问题描述】:

我在使用 orderByRaw 函数时遇到了 Eloquent/QueryBuilder 的问题,我得到异常列不存在,但该列已经存在于数据库中。

这是一个例外:

SQLSTATE[42883]: Undefined function: 7 ERROR:  function field(integer, integer) does not exist
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

数据库中的状态列是整数。 这是我的代码:

$orderedStatuses = implode(',', [4]);
$users->orderByRaw(\DB::raw("FIELD(status, $orderedStatuses)"));

...另外,如果我使用 users.status 我得到了同样的错误。

有人可以帮我吗?

谢谢

【问题讨论】:

  • orderByRaw 已经需要原始 SQL。你也不需要在里面使用DB::raw
  • 此外,对于 fubar 所写的内容,MySQL FIELD() 函数接受字符串作为参数。显然,您正在传递整数。错误消息没有说明您提到的不存在的列。这是关于错误使用的功能。

标签: database laravel eloquent laravel-query-builder


【解决方案1】:

orderByRaw 需要原始 SQL,您必须在 orderByRaw 的参数中传递字符串。

例子:

$users->orderByRaw('field1 ASC, field2 DESC, field3 DESC,...');

【讨论】:

    【解决方案2】:

    你混合了这两种方法。

    $users->orderBy(\DB::raw("FIELD(status, $orderedStatuses)"));
    

    或者

    $users->orderByRaw("FIELD(status, $orderedStatuses)");
    

    【讨论】:

      猜你喜欢
      • 2020-09-27
      • 2021-04-24
      • 1970-01-01
      • 2019-05-21
      • 2015-04-21
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多