我在内存数据库中使用sqlite运行单元测试,但我遇到了问题。
当我使用mysql数据库执行测试时,以下比较正常工作
if ($item->user_id === Auth::id())
如果数字匹配则评估为真,如果不匹配则评估为假。当我在内存数据库中使用sqlite时,条件语句将始终返回false
,因为user_id
属性作为string
而不是正确的{{1}返回数据类型。
我已经阅读了一些帖子和评论,说这是PHP中sqlite的可配置内容,其他人说它无法更改。我想在内存中使用sqlite数据库进行测试,但如果我无法改变这种行为,我必须更改条件以使用int
而不是更严格的==
。如何更改sqlite查询的行为?
更新
我也尝试将其添加到sqlite配置
===
这也没有帮助。
答案 0 :(得分:3)
The problem is actually with PDO,而不是SQLite或Laravel,实际上发生在所有数据库中。您从MySQL获得int
的事实表明您正在使用the mysqlnd
driver,这解决了MySQL的问题。
我使用的解决方案是在我的模型中explicitly cast fields:
protected $casts = [
'user_id' => 'integer'
];