2012-02-02 3 views
0

에 가입하고 간단한 가입해야 어떤 문제가 있어요문제가 테이블 내가 교리 2.1 교리 1.2에서 마이그레이션하고

이것은 내 첫 번째 테이블 :

/** 
* Model_WBS 
* 
* @Table(name="WBS") 
* @Entity 
*/ 
class Model_Wbs 
    /** 
    * @var integer $id 
    * 
    * @Column(name="id", type="integer", length=8) 
    * @Id 
    * @GeneratedValue(strategy="SEQUENCE") 
    * @SequenceGenerator(sequenceName="wbs_seq_seq", allocationSize=1, initialValue=1) 
    */ 
    public $id; 
    . 
    . 
    . 
    /** 
    * @var \Doctrine\Common\Collections\ArrayCollection 
    * 
    * @OneToMany(targetEntity="Model_WbsFund", mappedBy="id") 
    * @JoinColumn(name="id", referencedColumnName="wbs_id") 
    */ 
    public $wbsfunds; 

그리고 이것은 내 두 번째 여기에 테이블

/** 
* Model_WbsFund 
* 
* @Table(name="WBS_FUNDS") 
* @Entity 
*/ 
class Model_WbsFund  
/** 
    * @var integer $id 
    * 
    * @Column(name="id", type="integer", length=8) 
    * @Id 
    * @GeneratedValue(strategy="SEQUENCE") 
    * @SequenceGenerator(sequenceName="wbs_funds_seq_seq", allocationSize=1, initialValue=1) 
    */ 
public $id; 

/** 
* @var integer $wbs_id 
* 
* @Column(name="wbs_id", type="integer", length=8) 
*/ 
public $wbs_id; 
. 
. 
. 
    /** 
    * @var \Doctrine\Common\Collections\ArrayCollection 
    * 
    * @ManyToOne(targetEntity="Model_Wbs", inversedBy="wbs_id") 
    * @JoinColumn(name="wbs_id", referencedColumnName="id") 
    */ 
    public $WBS; 

그리고 내 간단한 테스트입니다

$testEntity = Model_Wbs::find(7185); 
foreach($testEntity->getwbsfunds() as $wbsfundobj){ 
    print("<br/>"); 
    print($wbsfundobj->FUND->getFundCode()." -- ".$wbsfundobj->WBS->getWbs()); 
} 
,536,

그래서 나는 처음 검색 한 wbs와 관련된 wbsfunds 테이블의 자금 코드와 wbs를 볼 것으로 예상됩니다. (나는 실제로 WBS id 7185와 관련된 자금을 얻는지를 확인하기 위해 WBS-> getWbs()를 사용했다.)

대신 모든 wbs_funds 레코드가 표시됩니다. 내가 생성 된 쿼리 문 교리를 인쇄하고 그것은 올바른 아니에요

SELECT t0.id AS ID1, t0.wbs_id AS WBS_ID2, t0.fund_id AS FUND_ID3, t0.wbs_id AS WBS_ID4, t0.fund_id AS FUND_ID5 FROM WBS_FUNDS t0 

흥미로운 점은 wbsfundobj-> WBS-> getWBS을처럼 wbsfundobj-> 자금 지원이 사이의 링크> geFundCode는() (, 좋은 작품이다), WBS에서 WBS_FUNDS로 연결되는 링크가 잘못되었습니다.

+0

공개 속성 대신 보호 된 속성을 사용하는 것이 좋습니다. http://stackoverflow.com/questions/4090609/how-can-public-fields-break-lazy-loading-in-doctrine-2 – Florian

답변

0

일반적으로 엔터티의 저장소에서 find()을 호출합니다. 같은 뭔가 : 당신이 EntityManager에 대한 참조를 얻을 방법

// $em is your Entity Manager instance 
$testEntity = $em->getRepository('\Model_Wbs')->find(7185); 

// or a shorcut 
$testEntity = $em->find('\Model_Wbs', 7185); 

는 교리 부트 스트랩 방법에 따라 달라집니다. 당신이 Bisna application resource plugin를 사용하는 경우, 그것은 (컨트롤러)과 같이 될 것이다 : 일반적으로, 나는 컨트롤러의 init() 방법이 점을 넣어

$em = $this->getInvokeArg('bootstrap')->getResource('doctrine')->getEntityManager(); 

또는 내가 그것을 호출 할 수 있도록 위의 단계를 캡슐화하는 액션 도우미를 쓰기

$em = $this->_helper->doctrine->getEntityManager();