Como evitar que o Doctrine transforme inteiro em string

Em nosso projeto, usamos consultas MySQL nativas para buscar nossos dados. Desta forma, podemos pular a parte pesada do ORM, mas isso nos tornou um problema irritante. Sempre que fizemos um select que deveria retornar um inteiro, ele foi transformado em uma string.

Exemplo:

Base de dados

position    int(11)

Inquerir

$sql = "SELECT g.position FROM goal g";
$stmt
= $this->conn->executeQuery($sql);
var_dump
($stmt->fetchAll());

Resposta

array (size=2)
0 =>
array
(size=3)
'position' => string '2' (length=1)
1 =>
array
(size=3)
'position' => string '1' (length=1)

Portanto, você pode ver que nossa consulta retornou todas as posições que encontramos, mas todas foram transformadas em strings, embora as tenhamos declaradas como inteiros.

Como podemos consertar isso?

ETAPA 1: Instale o driver nativo do MySQL e remova o antigo

sudo apt-get remove php5-mysql
sudo apt
-get install php5-mysqlnd

ETAPA 2: mude a opção 20 em suas configurações de doutrina

Na doutrina

$params = array(
'driver' => 'pdo_mysql',
'dbname' => 'mydb',
'host' => 'localhost',
'user' => 'root',
'password' => '',
'charset' => 'utf8',
'driverOptions' => array(
PDO
::ATTR_EMULATE_PREPARES => FALSE
)
);

No symfony

doctrine:
dbal
:
default_connection
: default
connections
:
default:
driver
: "%database_driver%"
host
: "%database_host%"
port
: "%database_port%"
dbname
: "%database_name%"
user
: "%database_user%"
password
: "%database_password%"
charset
: UTF8
options
:
20: false

Mais informações

20 = PDO :: ATTR_EMULATE_PREPARES

http://php.net/manual/en/pdo.setattribute.php

Nova resposta

array (size=2)
0 =>
array
(size=3)
'position' => int 2
1 =>
array
(size=3)
'position' => int 1

Aproveitar!

Agradecimentos extras: @wmolenberghs

Todas as minhas dicas foram movidas para o meu blog www.pix-art.be, então venha conferir!