在 Laravel ORM 中使用两列

Using two columns in where Laravel ORM

我的 table 中有两列:maxcurrent。我想构建简单的范围

public function scopeNotMax($query)
{
    return $query->where('max', '>', 'current');
}

但是 Laravel 给了我那个查询:

SELECT * FROM table WHERE `max` > 'current'

我不想要这个结果,我知道我可以在这个地方使用 whereRaw()DB::raw()。但我找不到另一种方式来表达“嘿,这是列,不是字符串!”。我可以这样做吗?或者我必须使用 raws?我想避免它。

你尝试过这个吗? return $query->where('max > current');

没有别的办法。

where() 方法在这种情况下将第三个参数(值)添加到绑定并将其传递给 PDO 库。所以会被转义。

或者您可以将闭包作为第三个参数传递,但是 laravel 将为您形成一个子 select,这没有多大帮助。

看来whereRaw()就是为这种情况而生的

你可以使用 whereRaw():

->whereRaw('table_1.name = table_2.name');

您的示例代码:

->whereRaw('max>current');