2014-01-26 2 views
1

데이터베이스에서 doctrine으로 객체를 가져 오는 중이며 가능한 PHP 배열을 찾아 보는 것처럼 탐색하고 싶습니다. 나는 실제로이와doctrine으로 결과를 가져 왔습니다. 알 수없는 많은 데이터가 있습니다.

$COA = $this->getDoctrine()->getRepository('NRtworksChartOfAccountsBundle:Account')->findOneById(1); 

    var_dump($COA); 

을 : 이제

가의 인출을 시도하자이 내 데이터베이스로 만들어

<?php 
namespace NRtworks\ChartOfAccountsBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 


/** 
* @ORM\Entity 
* @ORM\Table(name="Account") 
*/ 

class Account 
{ 
    /** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 

protected $id; 

/** 
* @ORM\Column(type="string", length=100, unique = true) 
*/ 

protected $name; 

/** 
* @ORM\Column(type="string", length=50) 
*/ 

protected $code; 

/** 
* @ORM\OneToMany(targetEntity="Account", mappedBy="parent") 
*/ 

private $children; 

/** 
* @ORM\ManyToOne(targetEntity="Account", inversedBy="children") 
*/ 

private $parent; 


public function __construct() 
    { 
     $this->children = new ArrayCollection(); 
     $this->parent = new ArrayCollection(); 

    } 

//getter & setter  

?> 

와 교리는 잘 작동 :

내가 당신에게 나의 실체를 보여 드리죠 내가 원하는 물건을 가져라. 그러나 나는 (Fos_UserBundle과 같은) 다른 것들이 내 사용자 엔티티 (다른 번들에서)에 사용되지만 여기에 사용 된 엔티티 계정과 아무 관련이 없다는 것과 같은 많은 것들을 가지고있다. var_dump 결과를보십시오 :

object(NRtworks\ChartOfAccountsBundle\Entity\Account)#408 (5) { ["id":protected]=> int(1) ["name":protected]=> string(5) "BILAN" ["code":protected]=> string(6) "000000" ["children":"NRtworks\ChartOfAccountsBundle\Entity\Account":private]=> object(Doctrine\ORM\PersistentCollection)#409 (9) { ["snapshot":"Doctrine\ORM\PersistentCollection":private]=> array(0) { } ["owner":"Doctrine\ORM\PersistentCollection":private]=> *RECURSION* ["association":"Doctrine\ORM\PersistentCollection":private]=> array(15) { ["fieldName"]=> string(8) "children" ["mappedBy"]=> string(6) "parent" ["targetEntity"]=> string(45) "NRtworks\ChartOfAccountsBundle\Entity\Account" ["cascade"]=> array(0) { } ["orphanRemoval"]=> bool(false) ["fetch"]=> int(2) ["type"]=> int(4) ["inversedBy"]=> NULL ["isOwningSide"]=> bool(false) ["sourceEntity"]=> string(45) "NRtworks\ChartOfAccountsBundle\Entity\Account" ["isCascadeRemove"]=> bool(false) ["isCascadePersist"]=> bool(false) ["isCascadeRefresh"]=> bool(false) ["isCascadeMerge"]=> bool(false) ["isCascadeDetach"]=> bool(false) } ["em":"Doctrine\ORM\PersistentCollection":private]=> object(Doctrine\ORM\EntityManager)#137 (10) { ["config":"Doctrine\ORM\EntityManager":private]=> object(Doctrine\ORM\Configuration)#150 (1) { ["_attributes":protected]=> array(13) { ["entityNamespaces"]=> array(3) { ["NRtworksChartOfAccountsBundle"]=> string(37) "NRtworks\ChartOfAccountsBundle\Entity" ["NRtworksSubscriptionBundle"]=> string(34) "NRtworks\SubscriptionBundle\Entity" ["FOSUserBundle"]=> string(21) "FOS\UserBundle\Entity" } ["metadataCacheImpl"]=> object(Doctrine\Common\Cache\ArrayCache)#159 (3) { ["data":"Doctrine\Common\Cache\ArrayCache":private]=> array(5) { ["DoctrineNamespaceCacheKey[sf2orm_default_3f554f15ae41595a1a142aaf979fc6f613a39d4a606464e7ca2715f45fc7d314]"]=> int(1)   

그리고 내 인내가 넘칠 때까지 계속됩니다.

나는 ladybug_dump하려고했는데 제대로 작동합니다. 아이들이나 부모 컬렉션에있는 것을 볼 수 없습니다. 내 나뭇 가지에서 나는 문제없이 찾아 볼 수있다.

하지만 결과를 다시 정리하려면 구조를 잘 이해해야합니다.

누군가가이 데이터의 출처와 이유를 알고 있습니까?

답변

0

"훨씬 더 많은 것들"은 Doctrine의 Collection과 관련이 있습니다. 이는 ArrayCollection (OneToMany 및 ManyToMany 연결에 대한 엔티티 생성자에서 인스턴스화), PersistentCollection (데이터베이스에서 엔티티를 가져 오는 경우) 등으로 구현됩니다.

특히 PersistentCollection에는 컬렉션 변경시 데이터베이스에 대해 유지해야 할 사항을 추적하는 등 Doctrine에서 관리해야하는 많은 데이터가 포함되어 있습니다.

난 정말 당신이 당신의 실체를 덤프 할 수있는 편리한 방법을 찾고 있다면, 달성하기 위해 :(

노력 Doctrine\Common\Util\Debug::dump()를 보라하는지 이해가 안 돼요.

당신이 원하는 경우 배열로 엔티티를 사용하려면 Doctrine\ORM\Query. 의 getArrayResult() 방법을 사용하여 배열로 가져올 수 있습니다 또는 당신은 요하네스 슈미트에 의해 Serializer 도서관에서 모습을 가질 수 있습니다.

갱신

표시되는 "Fos_UserBundle stuff"는 이고 "entityNamespaces" 아래의 배열에 있습니다. 이것은 콜렉션 내의 메타 데이터의 일부입니다.

+0

괜찮 았어. 내 결과에 뭔가 문제가 있다고 걱정 했어. 아직도 나는 FOS User Bundle이 있다는 이상한 것을 발견했다.하지만 ... 실제로 내 질문의 맨 아래는 내 결과를 배열, 그리고 분명히 나는 ​​그럴 수 없다. 나는 나뭇 가지에서 그것을 정렬하려고합니다. 비효율적 인 경우 솔루션 중 하나를 사용하겠습니다. 감사합니다. – Eagle1

+0

FosUserBundle 항목에 대해 더 명확하게 답을 업데이트했습니다. –

+0

이 생성자 내에서이 부모와 함께 모든 계정을 가져 오는 doctrine 쿼리로 배열 자식을 채울 수 있습니까? 그것은 적절한가? – Eagle1