Doctrine에서 기본 hydrator를 설정하는 방법을 찾을 수 없습니다. 사용할 수 있어야합니다. 권리?Doctrine에서 기본 수화기를 설정하는 방법?
위의 문서 페이지는 사용자 정의 하이드 레이터를 만드는 방법에 대해 설명합니다. 여기서 단점은 쿼리를 실행할 때마다 수화기를 "지정"해야한다는 것입니다.
Doctrine에서 기본 hydrator를 설정하는 방법을 찾을 수 없습니다. 사용할 수 있어야합니다. 권리?Doctrine에서 기본 수화기를 설정하는 방법?
위의 문서 페이지는 사용자 정의 하이드 레이터를 만드는 방법에 대해 설명합니다. 여기서 단점은 쿼리를 실행할 때마다 수화기를 "지정"해야한다는 것입니다.
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
}
}
}
그런 다음 부트 스트랩에서 새 클래스에 대해 Doctrine에게 알려주십시오.
Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_QUERY_CLASS, 'App_Doctrine_Query');
크리스 구티에레즈 대신 세계의 연결에 대한 속성을 정의하지만 둘 이상의 연결을 가지고 내가 그들 모두를 위해이 기본값을 사용하고 싶습니다.
이제는 쿼리를 작성할 때마다 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)"과 같은 일을하면 객체가 아니라 수화 배열이 반환됩니다. 그래서 나는 이것을 약간 변경하여 Query 호출에 사용할 사용자 정의 실행 메소드를 정의했습니다.
또한 메모리 추가 코드를 추가했습니다.
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;
}
}
그건 좋은 생각이 될거야, 그리고 귀하의 질문을 읽고 나는 그것이 Doctrine을 통해 할 수있는 일이라고 생각했습니다. 그러나 코드를 읽으면 다음과 같이 생각할 수 없습니다.
Doctrine_Query::create()
두 번째 인수 - 수화 모드를 지정하지 않고 Doctrine_Query_Abstract::__construct()
의 첫 번째 인수 만 연결을 지정하여 새 쿼리를 만듭니다. 구성 호출이 이루어지지 않습니다. 수화기가 전달되지 않으므로 새로운 Doctrine_Hydrator
이 생성되고 생성자는 구성 옵션을 동등하게 고려하지 않으므로 기본값은 Doctrine::HYDRATE_RECORD
입니다.
아마도 아래 팩토리 메서드로 Doctrine_Query를 서브 클래 싱하는 것이 가장 쉬운 방법일까요?
public static function create($conn = null)
{
return new Doctrine_Query($conn,Doctrine::HYDRATE_ARRAY);
}
안녕하세요, 답변 해 주셔서 감사합니다. 기본적으로 커스텀 Query 클래스를 사용하도록 Doctrine에 지시하는 방법이 있다면 여러분의 아이디어가 효과적입니다. 그러한 기능이있을 경우 어떤 아이디어가 있습니까? 다시 한번 감사드립니다. –
doctrine 쿼리 클래스를 설정하는 방법이 있어야합니다. $ conn-> setAttribute (Doctrine_Core :: ATTR_QUERY_CLASS, 'MyQueryClass'); - Doctrine 1.2 문서 http://www.doctrine-project.org/projects/orm/1.2/docs/manual/configuration/en에 있습니다. –