[英]cast_on_hydrate ignored when columns are specified in Query Builder
我在Phalcon中遇到了非常具體的問題,想知道是否有人可以看看並建議是否有解決方案?
在我的引導程序中,我使用了ini_set()來設置cast_on_hydrate的值ini_set('phalcon.orm.cast_on_hydrate', 'on');
我在PHP 7.2.11上使用Phalcon 3.4.0。
如果我使用Model :: find()樣式方法, cast_on_hydrate似乎工作正常。 但是,當我使用查詢生成器時,這種情況會發生變化。 請注意,我使用的是啟用了Model Namespacing的多模塊樣式應用程序。
如果我使用Phalcon的查詢生成器來創建簡單查詢:
$di = \Phalcon\Di::getDefault();
$modelsManager = $di->getModelsManager();
$builder = $modelsManager
->createBuilder()
->from(['Jobs' => 'Jobs:Jobs']);
$results = $builder->getQuery()->execute();
var_dump($results[0]->id);
var_dump顯示結果,正確轉換為整數: int(87)
如果再將一些列添加到混合中:
// using same getModelsManager() as above
$builder = $modelsManager
->createBuilder()
->columns(['Jobs.id', 'Jobs.user_id'])
->from(['Jobs' => 'Jobs:Jobs']);
// getting results from $builder is same as above example
var_dump的輸出現在是string(2) "87"
我對此的疑問是:
這是預期的行為,還是我應該報告的錯誤?
有什么解決方法嗎? 例如,我想知道是否使用Phalcon \\ Mvc \\ Model \\ MetaData \\ Strategy \\ Annotations是否會有所不同
我可以通過某種方式將所選列的詳細信息傳遞給查詢生成器,並強制其以某種方式轉換查詢結果嗎? 我見過Phalcon \\ Mvc \\ Model \\ Query :: setBindTypes(),但這似乎不起作用(請參閱下文)
最后一點是一些我嘗試過的示例,這些示例似乎不起作用:
// using same $builder as above
$query = $builder->getQuery();
$query->setBindTypes([
'Jobs.id' => \Phalcon\Db\Column::BIND_PARAM_INT,
'Jobs:Jobs.id' => \Phalcon\Db\Column::BIND_PARAM_INT,
'id' => \Phalcon\Db\Column::BIND_PARAM_INT,
]);
$results = $query->execute();
var_dump($results[0]->id); // string(2) "87"
對於上述任何建議,我將不勝感激。 謝謝您的幫助!
我通過在Dependency Injector中編輯db
服務並添加一些選項來使其工作
'options' => [
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_STRINGIFY_FETCHES => false,
],
在創建新的MySQL連接時,它就位於您的主機,用戶名,dbname,密碼等下方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.