2014-07-23 6 views
0

사용자 지정 엔터티 (UserClient, UserCollaborator ..)와 함께 FOSUserBundle을 사용하고 있습니다. 아이디어는 FOSUserBundle 사용자와 각 엔티티의 OneToOne 관계를 갖는 것입니다. 내 사용자 정의 사용자 엔티티는 분리 된 번들에 있습니다.Symfony/Doctrine. 사용자 지정 사용자 엔터티가있는 FOSUserBundle

namespace Acme\Project\ProjectUserBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Acme\Project\UserBundle\Entity\User; 

class UserCollaborator 
{ 
    /** 
    * @var User 
    * 
    * @ORM\OneToOne(targetEntity="Acme\Project\UserBundle\Entity\User") 
    */ 
    protected $user; 
} 

그러나의 : 사용자와 OneToOne (단방향)의 관계가 (다른 번들에)

namespace Acme\Project\UserBundle\Entity; 

use FOS\UserBundle\Model\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 

class User extends BaseUser 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 
} 

그리고 UserCollaborator :

나는 FOSUserBundle을 무시 UserBundle의 사용자 엔티티가 내 UserCollaboratorController findAll()로 나열하려고하면 User의 ID 만 가져오고 FOSUserBundle의 User 엔티티의 다른 속성은 모두 null입니다. 내 Acme \ Project \ UserBundle \ Entity \ User에서 부모 속성을 호출하는 getters를 구현하려고했지만 작동하지 않습니다 (속성이 보호되므로 getter가 필요하지 않아야 함). 자동 매핑은 true로 설정됩니다.

가 나는 게으른 로딩과 관련이 뭔가 생각하지만, 나는 그것을 처리하는 방법을 모른다 (예를 들어, $ userCollaborator-> 사용자 -> 가령 getMail() 내 컨트롤러에서 작동하지 않습니다)

정확한 findAll()에 대한 결과 :

array (size=1) 
    0 => 
     protected 'id' => int 1 
     private 'name' => string 'Testing' (length=18) 
     private 'phone' => string '9999999992' (length=10) 
     protected 'user' => 
      public '__isInitialized__' => boolean false 
      protected 'id' => int 7 
      protected 'username' => null 
      protected 'usernameCanonical' => null 
      protected 'email' => null 
      protected 'emailCanonical' => null 
      protected 'enabled' => null 
      protected 'salt' => null 
      protected 'password' => null 
      ... everything null 

누구나 이미이 문제에 직면 해 있습니까?

답변

0

귀하의 결과는 정확합니다.

$user은 보호 된 의미로 설정되며 자체 및 확장 클래스에서만 사용할 수 있습니다.

$userCollaborator->user을 사용하여 직접 사용자를 얻으려면 공개로 설정해야합니다.

사용자를 얻으려면 게터 $userCollaborator->getUser()을 사용해야합니다.

+0

죄송합니다. $ userCollaborator-> getUser()를 시도 할 때 속성을 공개하거나 비공개로 유지하거나 getters를 사용하여 보호 한 질문에 대해 언급하는 것을 잊어 버렸습니다. $ userCollaborator-> getUser(), 수신 : " 오류 : getter 메서드에서 내 엔터티를 가리키는 UserCollaborator의 빈 속성에 액세스 할 수 없습니다. public function getUser() { return $ this -> $ user; } – gritt

+0

그 것이 오타입니까, 아니면 실제로'$ this -> $ user'입니까? – qooplmao

+0

우, 실제로 $! 나는 그것을 믿을 수 없다 .. 처음에 "$"를 고쳤을 때 $ userCollaborator-> getUser()를 사용하여 여전히 null 속성이 있지만 지금은 doctrine의 지연로드가 적용된다. 그래서, $ userCollaborator-> getUser() -> getEmail()을 사용하면 필요할 때 바로 예상 한 것을 반환합니다! 정말 고맙습니다! – gritt