我正在使用Laravel查询构建器来搜索类别。 这是:
$array[] = $categories->where('pk_i_id', $category_id)->first();
我必须手动将类别ID转换为字符串,即使在数据库中它是Integer类型。为什么我要这样做?
实际上 - 我必须在安装了Lamp堆栈的Linux机器上执行此操作。在具有Xampp的Windows机器上,它将列视为应该是整数。
答案 0 :(得分:0)
问题听起来更像是$categories
已经是Collection
,而不是Builder
。 Collection
和Builder
都有where()
方法,但它们的逻辑不一样。
where()
上的Builder
方法会将参数化的where子句添加到针对数据库运行的查询中。在这种情况下,变量的类型无关紧要。
然而,where()
上的Collection
方法将遍历集合并返回第一个参数中的字段与传入的值完全相等(===
)的结果第二个参数。要更改此设置,您可以将false
作为第三个参数传递,它将使用松散比较(==
)而不是严格。此外,您可以使用whereLoose()
,这是where()
的快捷方式,第三个参数为false
。
$array[] = $categories->where('pk_i_id', $category_id, false)->first();
// or
$array[] = $categories->whereLoose('pk_i_id', $category_id)->first();
如果不正确的字段类型导致了您所描述的更多问题,那么您可能希望解决潜在问题。正如链接帖子中所指出的那样,在LAMP堆栈上,您需要用mysqld
驱动程序替换mysqlnd
驱动程序。