我的表格中有两列:max
和current
。我想构建简单的范围
public function scopeNotMax($query)
{
return $query->where('max', '>', 'current');
}
但是Laravel给了我那个查询:
SELECT * FROM table WHERE `max` > 'current'
我不想要这个结果,我知道我可以在这个地方使用whereRaw()
或DB::raw()
。但我无法找到另一种方式来说"嘿,这是专栏,而不是字符串!'。我可以做吗?或者我必须使用原料?我想避免它。
答案 0 :(得分:1)
没有别的办法。
在这种情况下, where()
方法将第三个参数(值)添加到绑定并将其传递给PDO库。所以它将被逃脱。
或者您可以将第三个参数作为Closure传递,但是laravel将为您形成一个子选择,这对你没什么帮助。
看起来whereRaw()
就是为了这种情境而制作的。
答案 1 :(得分:0)
你试过这个吗? return $query->where('max > current');
答案 2 :(得分:0)
你可以使用 whereRaw():
->whereRaw('table_1.name = table_2.name');
你的例子代码:
->whereRaw('max>current');