I'm running unit tests using the sqlite in memory database and I've run into an issue.
When I perform the tests using a mysql database, the following comparison works properly
if ($item->user_id === Auth::id())
It will evaluate to true if the numbers match and false if they don't. When I use the sqlite in memory database the conditional statement will always return false
because the user_id
attribute is returned as a string
instead of the proper int
data type.
I've read a few posts and comments saying this is a configurable thing for sqlite in PHP and others saying it cannot be changed. I want to use the in memory sqlite database for my tests but if I can't change this behavior I have to change my conditionals to use ==
instead of the more strict ===
. How can I change the behavior of the sqlite queries?
UPDATE
I've also tried adding this to the sqlite configuration
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'options' => [
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::FETCH_NUM => true,
],
],
This doesn't help either.