gpt4 book ai didi

php - 如何在 Doctrine 中设置默认水化器?

转载 作者:搜寻专家 更新时间:2023-10-31 21:18:57 25 4
gpt4 key购买 nike

我找不到在 Doctrine 中设置默认水化器的方法。它应该可用。对吧?

http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/data-hydrators.html#writing-hydration-method

上面的文档页面解释了如何创建自定义水化器。这里的缺点是每次执行查询时都需要“指定”水化器。

最佳答案

我通过阅读 Chris Gutierrez 的评论并更改了一些东西来解决这个问题。

首先,为 Doctrine_Query 定义一个扩展类。扩展构造函数以定义您自己的水合模式。

class App_Doctrine_Query extends Doctrine_Query
{
public function __construct(Doctrine_Connection $connection = null,
Doctrine_Hydrator_Abstract $hydrator = null)
{
parent::__construct($connection, $hydrator);
if ($hydrator === null) {
$this->setHydrationMode(Doctrine::HYDRATE_ARRAY); // I use this one the most
}
}
}

然后,在您的 Bootstrap 中,将您的新类(class)告诉 Doctrine。

Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_QUERY_CLASS, 'App_Doctrine_Query');  

Chris Gutierrez 为连接而不是全局定义了属性,但我有多个连接,我想对所有连接使用此默认值。

现在您不必在每次构建查询时都调用 Doctrine_Query::setHydrationMode()。

这里有更多信息
http://www.doctrine-project.org/projects/orm/1.2/docs/manual/configuration/en#configure-query-class

编辑:以下更改

我发现了上面的问题。具体来说,执行类似“Doctrine_Core::getTable('Model')->find(1)”的操作将始终返回一个水化数组,而不是一个对象。所以我对此做了一些改动,定义了用于查询调用的自定义执行方法。

另外,我添加了内存释放代码。

class App_Doctrine_Query extends Doctrine_Query
{
public function rows($params = array(), $hydrationMode = null)
{
if ($hydrationMode === null)
$hydrationMode = Doctrine_Core::HYDRATE_ARRAY;
$results = parent::execute($params, $hydrationMode);
$this->free(true);
return $results;
}

public function row($params = array(), $hydrationMode = null)
{
if ($hydrationMode === null)
$hydrationMode = Doctrine_Core::HYDRATE_ARRAY;
$results = parent::fetchOne($params, $hydrationMode);
$this->free(true);
return $results;
}
}

关于php - 如何在 Doctrine 中设置默认水化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2064488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com