2011-08-06 6 views
2

셋업 :교리 2 OneToOne 엔티티 매핑 빈 엔티티를 반환

나는 다음과 같은 코드 두 개체 모델이 있습니다

계정, 사용자 계정을 나타내는 및 교실 외래 키가 있습니다.

<?php 
namespace models; 

/** 
* @Entity 
*/ 
class Account 
{ 
    /** 
    * @Id @Column(type="integer") 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    public $id; 

    /** 
    * @OneToOne(targetEntity="Classroom") 
    */ 
    public $classroom; 
} 

학생에 enroled되는 교실을 나타냅니다 교실

<?php 
namespace models; 

/** 
* @Entity 
*/ 
class Classroom 
{ 
    /** 
    * @Id @Column(type="integer") 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    public $id; 

    /** 
    * @Column(type="string") 
    */ 
    public $name; 
} 

문제 :. 내가 $account = $em->find('Account',$id);을 수행 할 때

내가 제대로, 데이터베이스에서 다시 계정을 얻을 수 있지만, $account->classroom;은 공백 (null이 아님) 개체입니다. 조금 실험 후 나는 실행하기 전에 다음 명령을 추가 시도 : 계정 개체가 제대로 반환 내부

$em->getRepository('Classroom')->findAll(). 

그런 다음 나는 $em->find('Account', $id); 교실 개체를 실행.

사고 :

내가 모든 교실 개체를로드하는 경우 (또는 하나의 내가 계정과 연결된) 때문에 개체가로드 및 데이터베이스에서 캐시하는 방법에 문제가 있다고 가정 전에 나는 내 find()을 수행하고 모든 것이 좋습니다.

필자는 PHP와 Doctrine의 초보자로서 그 문제를 해결하기 위해 더 많은 의견과 도움을 구합니다. Doctrine Architecture Documentation에서

답변

4

:

항상을 예상대로 개인 또는 보호 , 그렇지 않으면 게으른 로딩이 작동하지 않을 수 있어야 할 엔티티 클래스의 모든 영속 프로퍼티/필드.

귀하의 $classroom 속성은 교실 엔티티와 연관이 게으른로드되지 않는 아마도 이유입니다, public이다. private 또는 protected으로 변경해야합니다 (various reasons의 경우 모든 엔티티 속성을 protected으로 지정하는 것이 좋습니다).

문제가 해결되지 않으면, 당신은 EAGER로 OneToOne 협회의 fetch 속성을 설정하려고 할 수있다, 즉

/** 
* @OneToOne(targetEntity="Classroom", fetch="EAGER") 
*/ 
protected $classroom;