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

标签 php configuration doctrine

我找不到在 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/

相关文章:

configuration - 为什么 PyCharm 总是将 "contents root"添加到我的 PYTHONPATH,以及什么 PYTHONPATH?

java - 是否可以使用 spring-security 来保护包含的 jsp?

asp.net - <assemblyBinding> 在父 web.config 中被忽略

php - 如何从 symfony 2.4 中的选择字段插入数据

php - MySQL 查询问题 - 连接和分组

php - 在 MySQL 更新中使用 AND

php - 如何将内容动态创建到数据库中并显示在网页上?

php - 在 CakePhp 测试中,testAction() 函数在 debug() 上返回 null

php - 是否有替代使用 for 循环插入多个查询的方法

mysql - Doctrine2 一对多关系反方不保存所属方 ID