2012-07-14 28 views
4

找不到任何東西 - 看起來應該是直截了當的。如何在原生查詢COLUMNS上使用Doctrine2類型轉換

所以Doctrine2文檔給出了關於綁定參數類型轉換的例子是這樣的:

$date = new \DateTime("2011-03-05 14:00:21"); 
$stmt = $conn->prepare("SELECT * FROM articles WHERE publish_date > ?"); 
$stmt->bindValue(1, $date, "datetime"); 
$stmt->execute(); 

我想要做的就是指定一個列的類型轉換,但並沒有什麼的文檔或我可以找到的StackOverflow。什麼這個僞例子可能是這樣的:

$stmt = $conn -> prepare("SELECT datetime FROM articles WHERE id = 1"); 
$stmt -> setType(0, "date_type"); // 0 being the column position, "date_type" being the PHP type to convert to 

如果有人知道如何做到這一點,(這是SQL不DQL),我將不勝感激。謝謝。

+0

請問你是如何解決這個問題的?我用普通的DBAL適配器使用Silex,所有提取的列都作爲字符串返回。你有沒有找到任何簡短的解決方案,而不是手動迭代+轉換? – VisioN 2015-03-06 10:18:42

回答

5

這不是在DBAL級別工作的東西。如果您在ORM中使用NativeSQL查詢,則可以通過使用HYDRATE_ARRAY模式通過水合作用(請參閱NativeSQL section in the Doctrine ORM documentation)獲得此類轉換,並將某些獲取的字段映射到實體。最快的解決方案(如果您不打算使用ORM)將迭代結果並通過訪問Doctrine\DBAL\Types\Type::getType($someType)->convertToPhpValue($fetchedValue)來手動應用類型轉換。對於ORM來說,這可能是一個有價值的補充,它可以指定在Doctrine\ORM\Query\ResultSetMapping#addScalarResult中指定提取類型的第三個參數。

+0

感謝您的澄清。我討厭ResultSetMapping功能。我發現它使用ORM非常無用和咄咄逼人。我主要只使用ORM功能來進行INSERT/UPDATE操作。我相信對於簡單的數據檢索,您應該儘可能簡單。 – 2012-07-16 00:35:11

+0

事實上,你需要一箇中間的水化器,而水化器需要一個配置(在本例中爲'ResultSetMapping')。這也適用於TableGateway和ActiveQuery或任何你想使用:) – Ocramius 2012-07-18 11:45:38

+0

在我的情況下,我不想/需要水合步驟,因爲我所要做的就是獲得一堆標量值,這將是正確的類型轉換。我希望能夠手動指定類型轉換並完全繞過ORM以簡單檢索標量值。就RSM功能而言,我意識到如果您想將自定義查詢轉化爲對象圖結果,但我仍然討厭它,這是必要的。 – 2012-07-19 18:07:18

相關問題