2011-09-23 3 views
5

저는 .NET으로 변환하여 현재까지 전환과 함께 즐거운 시간을 보내고 있습니다. doctrine 1.2를 ORM으로 사용하고 있으며 내 모델이 작동하고 모든 것이 잘 연결되어 있습니다. 그러나, 지금보고있는 문제는 출력 개체가 엄청납니다. 나는 USERS라고 불리는 매우 간단한 테이블을 가지고있다 - 아마도 4 열 또는 5 열의 다른 테이블에 8 열과 FK를 가지고있을 것이다. 내 사용자가 객체 수화 아래 코드를 사용하고 있습니다 : Doctrine 객체는 거대합니다.

$q = Doctrine_Query::create() 
->select('u.*') 
->from('USERS u') 
->where('u.VANITY_URL = ?',$Url_Frag); 

$users = $q->execute(); 

print_r($users); 

은 그 좋은, 그래서 객체 내 데이터 승/수화를 참조하십시오. 그러나 필자가 분명히 필요로하지 않는 수많은 메타 데이터처럼 보입니다. 전반적으로, 객체는 5000 라인 이상 있습니다! 기본적으로 "그러한 데이터 만 내보내고"라는 교묘 한 전환점이 있지만 교리 매뉴얼에서 찾을 수는 없습니다.

생각하십니까?

+0

사용 print_r ($ users-> toArray()); btw, 5000 라인의 객체를 갖는 것은 전혀 문제가되지 않습니다. – Zeljko

답변

1

몇 가지 옵션이 있습니다. 하나는 doctrine2로 전환하는 것입니다. 그것은 교활한 마법이없는 매끄러운 모델을 가지고 있습니다 1.

두 번째 것은 수화 모드를 변경하는 것입니다. doctrine_record 논리를 변경하지 않고도 객체의 교리 모델이나 비만을 실제로 조정할 수는 없습니다. 그래서이 작동 될 수 있습니다

$q = Doctrine_Query::create() 
->select('u.*') 
->from('USERS u') 
->where('u.VANITY_URL = ?',$Url_Frag) 
->setHydrationMode(Doctrine::HYDRATE_ARRAY); 
$users = $q->execute(); 

을 hughe 될 것입니다 이러한 개체를 Print_r'ing, 교리 클래스 네트워크에서 많은 중첩 된 객체 (일부 개체가 그들에서 "신 콤플렉스"의 비트)가 있기 때문에.

더 많은 문서는 여기에서 찾을 수 있습니다 : http://www.doctrine-project.org/documentation/manual/1_2/pl/data-hydrators:core-hydration-methods

1

내가 착각하고 있지 않다 경우 Doctrine1.2 기관에서 일부 원 참조, 그래서 print_r 또는 그들에 var_dump 좋은 생각이 아니다 있습니다. 실제로 재귀 깊이를 제한하는 Xdebug과 같은 것이 없으면 브라우저에 출력되지 않습니다.

실제로 메모리 소비가 염려되는 경우 memory_get_usage 함수를 사용하여 수화 전후에 메모리 풋 프린트를 검사하십시오.

7

는 Doctrine2 년에 dump() 방법을 사용할 수있다 :

\Doctrine\Common\Util\Debug::dump($var, $maxDepth) 

그것은 print_rvar_dump 비슷한 일을하지만, 모든 교리 관련 데이터를 숨 깁니다.

아마도 Doctrine 1.x와 비슷한 것이 있습니까?

6

Doctrine 1.2 개체 및 컬렉션에는 "toArray"라는 메서드가 있습니다. 이렇게 할 수 있습니다 :

print_r($users->toArray());