2012-10-29 34 views
1


我正在使用Silex微框架構建一個簡單的REST後端。Doctrine 2 DBAL只返回字符串數據類型

每個控制器裏面,我正在對MySQL數據庫的某些查詢(使用Doctrine 2 DBAL API),像如下:

$app->get('/customers', function (Application $app) { 
    $recordset = $app['db']->fetchAll('SELECT id, name FROM Customers'); 
    return $app->json($recordset); 
}); 

任何人都可以向我解釋爲什麼主義DBAL只返回string數據類型,無論列定義?下面是一個使用PHP var_dump($recordset)功能對應的輸出(注意id字段應該是整數類型,而不是字符串):

array(1) { 
    [0]=> 
    array(2) { 
    ["id"]=> 
    string(5) "10043" 
    ["name"]=> 
    string(20) "Hey, I'm just a test" 
    } 
} 

感謝您的幫助。

+0

由於DBAL內部使用PDO,我相信這是一個重複的http://stackoverflow.com/questions/1197005/how-to-get-numeric-types-from-mysql-using-pdo – Maerlyn

+0

@Maerlyn - 我意識到PDO問題,但是,在查看Doctrine源代碼時,我注意到每個數據庫表列都映射到相應的DBAL類型,它們公開了convertToDatabaseValue和convertToPHPValue方法。但是,這些方法似乎不影響查詢的結果。爲什麼? – Jerus

+0

我不知道教條的內部,你可以在github上的教條存儲庫上打開一張票,以得到一個深入的答案(如果它是一個錯誤,也可能是修復)。 – Maerlyn

回答

0

正如Maerlyn所建議的,這似乎是PDO驅動程序的一個已知問題,因此也是Doctrine DBAL的一個已知問題。

沒有利用Doctrine 2 ORM層提供的映射能力,我發現this答案是DBAL限制的一種可能的解決方法。

相關問題