无论定义什么数据类型,PHP sqlite都会返回所有字符串

时间:2017-10-18 08:22:39

标签: php sqlite pdo

我在内存数据库中使用sqlite运行单元测试,但我遇到了问题。

当我使用mysql数据库执行测试时,以下比较正常工作

if ($item->user_id === Auth::id())

如果数字匹配则评估为真,如果不匹配则评估为假。当我在内存数据库中使用sqlite时,条件语句将始终返回false,因为user_id属性作为string而不是正确的{{1}返回数据类型。

我已经阅读了一些帖子和评论,说这是PHP中sqlite的可配置内容,其他人说它无法更改。我想在内存中使用sqlite数据库进行测试,但如果我无法改变这种行为,我必须更改条件以使用int而不是更严格的==。如何更改sqlite查询的行为?

更新

我也尝试将其添加到sqlite配置

===

这也没有帮助。

1 个答案:

答案 0 :(得分:3)

The problem is actually with PDO,而不是SQLite或Laravel,实际上发生在所有数据库中。您从MySQL获得int的事实表明您正在使用the mysqlnd driver,这解决了MySQL的问题。

我使用的解决方案是在我的模型中explicitly cast fields

protected $casts = [
    'user_id' => 'integer'
];