2012-06-25 20 views
7

Sono nuovo di symfony2 e ho problemi a fare un join sinistro tra 2 entità. Sto ottenendo seguente messaggio di errore, e non so come risolvere questo problema:Symfony relazione ONE-TO-ONE

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

entità Utenti:

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; 

    .... 
    } 

L'UsersRepository assomiglia this:

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

Cosa sto facendo male?

risposta

15

Penso che il querybuilder sia a posto. Il tuo problema è probabilmente nella struttura dei dati.

Il modo in cui normalmente ci si avvicina è impostando una proprietà per relazione. Ad esempio, per la tua classe Users dovrebbe avere uno information o userInformation.

Forse qualcosa del genere aiuta?

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