我正在尝试查询postgres db并且每次都会出现SQL错误。 查询是正确的,但为什么它现在有用?
查询
Apireq::where('calls','<','maxcalls')->get();
错误
SQLSTATE [22P02]:整数
的输入语法无效
字段类型都设置为bigint
。
这很棒。
答案 0 :(得分:2)
你需要使用whereRaw而不是where。这很奇怪,但它解决了我认为是Laravel Bug的问题。
whereRaw('calls < maxcalls')
答案 1 :(得分:2)
@Andrew的回答是完全正确的,除了它不是一个bug而是预期的行为。
以下是一个例子:
where('foo', '=', 'bar')
现在Laravel有两种可能解释(或误解?)这个
bar
“当然您想要将列foo
与bar
进行比较。这是您的SQL:”
WHERE foo = bar
“很明显你想要foo
等于”bar“的所有记录。你走了:”
WHERE foo = "bar"
所以Laravel必须做出决定。而且因为一台计算机(至少没有人工智能)不可能知道你是否想要与一个值或另一列进行比较,开发人员认为它应该总是与该值进行比较(可能因为它是需要更多的功能)< / p>
正如您所知,whereRaw
是解决方案:
whereRaw('calls < maxcalls')