Ben Chris Gutierrez yorum okuma ve bazı şeyler değiştirerek bu anladım.
Birincisi, Doctrine_Query için bir uzantısı sınıfını tanımlar. Kendi hidrasyon modu tanımlamak için kurucu uzatın.
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
}
}
}
Ardından, bootstrap yılında, yeni sınıf hakkında Doktrini söyle.
Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_QUERY_CLASS, 'App_Doctrine_Query');
Chris Gutierrez küresel bağlantı yerine özniteliğini tanımlanmış ama ben birden fazla bağlantı var ve hepsi için bu varsayılan kullanmak istiyorum.
Şimdi Doctrine_Query :: setHydrationMode (bir sorgu oluşturmak) her zaman aramak zorunda değilsiniz.
Here's more information
http://www.doctrine-project.org/projects/orm/1.2/docs/manual/configuration/en#configure-query-class
EDIT: Changes below
Ben yukarıda bir sorun bulduk. Özellikle, gibi bir şey yapıyor "Doctrine_Core :: gettable ('Model') -> find (1)" her zaman hidrate dizi değil, bir nesne döndürür. Yani özel bir sorgu çağrısı kullanım yöntemlerini yürütmek tanımlayan, bu biraz değişmiş.
Ayrıca, ben bellek azat kod eklendi.
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;
}
}