簡體   English   中英

在查詢生成器中指定列時忽略cast_on_hydrate

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM