【发布时间】:2014-12-17 05:41:32
【问题描述】:
我正在尝试查询 postgres db 并每次都收到 SQL 错误。 查询是正确的,但为什么它现在起作用了?
查询
Apireq::where('calls','<','maxcalls')->get();
错误
SQLSTATE[22P02]:整数的输入语法无效
字段类型都设置为bigint。
这很奇怪。
【问题讨论】:
标签: postgresql laravel
我正在尝试查询 postgres db 并每次都收到 SQL 错误。 查询是正确的,但为什么它现在起作用了?
查询
Apireq::where('calls','<','maxcalls')->get();
错误
SQLSTATE[22P02]:整数的输入语法无效
字段类型都设置为bigint。
这很奇怪。
【问题讨论】:
标签: postgresql laravel
您需要使用 whereRaw 而不是仅使用 where。这很奇怪,但它解决了我认为是 Laravel 错误的问题。
whereRaw('calls < maxcalls')
【讨论】:
@Andrew 的回答是完全正确的,只是它不是错误而是预期的行为。
下面是一个例子:
where('foo', '=', 'bar')
现在有两种可能性 Laravel 可以解释(或误解?)这个
bar 的列
“您确定要将列foo 与bar 进行比较。这是您的SQL:”
WHERE foo = bar
“显然你想要foo等于“bar”的所有记录。给你:”
WHERE foo = "bar"
所以 Laravel 必须做出决定。而且由于计算机(至少没有人工智能)不可能知道您是否要与某个值或另一列进行比较,因此开发人员决定它应该始终与该值进行比较(可能是因为需要更多的功能)
如您所知,whereRaw 是解决方案:
whereRaw('calls < maxcalls')
【讨论】: