2012-06-25 21 views
7

私はsymfony2を初めて使い、2つのエンティティの間で左結合を行うのに問題があります。Symfony ONE-TO-ONE関係

class Users 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(name="user_id", type="string", length="16") 
    * @ORM\OneToOne(targetEntity="UsersInformation", mappedBy="Users") 
    */ 
    protected $user_id; 

    /** 
    * @ORM\Column(type="string", length="255") 
    */ 
    protected $username; 


    /** 
    * @ORM\Column(type="string", length="32") 
    */ 
    protected $password; 

    ... 

    /** 
    * Set user_id 
    * 
    * @param string $userId 
    */ 
    public function setUserId($userId) 
    { 
     $this->user_id = $userId; 
    } 

    /** 
    * Get user_id 
    * 
    * @return string 
    */ 
    public function getUserId() 
    { 
     return $this->user_id; 
    } 

    ... 
} 

エンティティUsersInformation:

class UsersInformation 
    { 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="string", length="16") 
    * @ORM\OneToOne(targetEntity="Users", inversedBy="UsersInformation") 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="user_id") 
    */ 
    protected $user_id; 

    /** 
    * @ORM\Column(type="string", length="255") 
    */ 
    public $email; 

    /** 
    * @ORM\Column(type="string", length="1") 
    */ 
    public $gender; 

    /** 
    * @ORM\Column(type="string", length="255") 
    */ 
    public $company; 

    .... 
    } 

UsersRepositoryが見えるエンティティユーザーが

[Semantical Error] line 0, col 69 near 'i': Error: Class Bundle\Entity\Users has no association named user_id

:私は、次のエラーメッセージが出ていて、この問題を解決する方法がわかりませんこれは:

public function getAllUsers($limit = null) 
    { 
     $qb = $this->createQueryBuilder('u') 
        ->select('u, i') 
        ->leftJoin('u.user_id', 'i'); 


     if (false === is_null($limit)) 
      $qb->setMaxResults($limit); 

     return $qb->getQuery() 
        ->getResult(); 
    } 

私は間違っているの?

答えて

15

私はquerybuilderが大丈夫だと思います。あなたの問題はデータ構造にある可能性が高いです。

あなたが通常これにアプローチする方法は、リレーションごとにプロパティを設定することです。 Usersクラスの場合は、たとえばinformationまたはuserInformationのようになります。

おそらくこのようなものが役に立ちますか?

class User 
{ 
    /** 
    * @ORM\Id 
    */ 
    protected $id; 

    /** 
    * @ORM\OneToOne(targetEntity="UserInformation") 
    */ 
    protected $information; 
} 

class UserInformation 
{ 
    /** 
    * @ORM\Id 
    */ 
    protected $id; 

    /** 
    * @ORM\OneToOne(targetEntity="User", inversedBy="information") 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    */ 
    protected $user; 
} 
関連する問題