【问题标题】:Eloquent ORM 5.1 query returns incorrect result (compared to plain SQL)Eloquent ORM 5.1 查询返回不正确的结果(与普通 SQL 相比)
【发布时间】:2016-05-14 11:53:30
【问题描述】:

我在 SQL 中有一个相当简单的查询

SELECT id, alias FROM users WHERE 
    `time_last_active` > (NOW() - INTERVAL 1 MINUTE) ORDER BY alias

现在不返回任何(即:零)行(对于我拥有的数据,这是正确/预期的结果)。

我尝试使用以下代码在 Eloquent ORM 中实现相同的查询

class Users extends Model
{
    protected $table   = 'users';

    public static function getActiveUsers ()
    {
        return self::where ('time_last_active', '>', "(NOW() - INTERVAL 1 MINUTE)")
            ->orderBy('alias')
            ->get(['id','alias'])
            ->toArray();
    }
}

这个查询执行没有错误并返回一个有效的结果(即:一个包含“id”和“alias”的行数组)但它返回表中的每一行。

有人知道我在这里做错了什么吗?我已经盯着这个看了一段时间了,我只是没有看到它。

感谢任何提示。

【问题讨论】:

    标签: php sql laravel laravel-5 eloquent


    【解决方案1】:

    为了像 "(NOW() - INTERVAL 1 MINUTE)" 一样使用 raw SQL,您需要将其包装在对 DB 的调用中: :raw(),否则将被视为字符串,而不是SQL语法。

    以下应该有效:

    return self::where('time_last_active', '>', \DB::raw("(NOW() - INTERVAL 1 MINUTE)"))
      ->orderBy('alias')
      ->get(['id','alias'])
      ->toArray();
    

    【讨论】:

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