2012-06-25 33 views
7

Tôi mới dùng symfony2 và gặp khó khăn khi thực hiện một phép nối trái giữa 2 thực thể. Tôi nhận được thông báo lỗi sau, và không biết làm thế nào để giải quyết vấn đề này:Mối quan hệ ONE-TO-ONE của Symfony

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

Người dùng Entity:

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; 
    } 

    ... 
} 

Entity 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; 

    .... 
    } 

Các UsersRepository trông giống như này:

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(); 
    } 

Tôi đang làm gì sai?

Trả lời

15

Tôi nghĩ rằng trình truy vấn trông ổn. Vấn đề của bạn có khả năng trong cấu trúc dữ liệu.

Cách bạn thường tiếp cận điều này là bằng cách thiết lập thuộc tính cho mỗi mối quan hệ. Ví dụ: đối với lớp Users của bạn, bạn cần có một ví dụ information hoặc userInformation.

Có lẽ điều gì đó như thế này sẽ giúp ích?

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; 
} 
Các vấn đề liên quan