2012-10-22 65 views
1

doctrine2關係屬性我已經在用戶enitityZF2不工作

/** 
* 
* @ORM\ManyToOne(targetEntity="\Auth\Entity\Company", inversedBy="user") 
* @ORM\JoinColumn(name="companyID", referencedColumnName="id") 
*/ 
protected $company; 


/** 
* 
* @ORM\ManyToOne(targetEntity="\Auth\Entity\Role", inversedBy="user") 
* @ORM\JoinColumn(name="roleID", referencedColumnName="id") 
*/ 
protected $role; 

我沒有在用戶表列角色或公司繼無柱的屬性。 但我在user表HAE列角色ID和companyID和用戶實體如下

/** 
    * @ORM\Column(type="integer") 
    * @ORM\ManyToOne(targetEntity="\Auth\Entity\Role", inversedBy="user") 
    * @ORM\JoinColumn(name="roleID", referencedColumnName="id")  
    */ 
    protected $roleID; 

    /** 
    * @ORM\Column(type="integer") 
    * @ORM\ManyToOne(targetEntity="\Auth\Entity\Company", inversedBy="user") 
    * @ORM\JoinColumn(name="companyID", referencedColumnName="id")  
    */ 
    protected $companyID; 

在用戶控制器thier各自的屬性,當我嘗試使用以下行它成功添加記錄,但沒有角色ID和companyID添加記錄

  $userData = array("username" => $username, "pass" => $secPass, 
       "salt" => $salt, "companyID" => $companyID, 
       "roleID" => $roleID, "cost" => $cost 
      ); 


      $user->populate($userData); 
      $this->getEntityManager()->persist($user); 
      $this->getEntityManager()->flush(); 

,但如果我從實體用戶刪除這兩個屬性,那麼它也添加角色ID和companyID

protected $company; 
protected $role; 

但我還需要以上屬性。我無法理解爲什麼這個衝突,

任何人都面臨這個問題?以及如何解決這個問題?任何想法?

回答

1

改變用戶實體您的屬性如下

/** 
* 
* @ORM\Column(type="integer") 
*/ 
protected $roleID; 

/** 
* 
* @ORM\Column(type="integer") 
*/ 
protected $companyID; 


/** 
* 
* @ORM\ManyToOne(targetEntity="\Auth\Entity\Company", inversedBy="user") 
* @ORM\JoinColumn(name="companyID", referencedColumnName="id") 
*/ 
protected $company; 


/** 
* 
* @ORM\ManyToOne(targetEntity="\Auth\Entity\Role", inversedBy="user") 
* @ORM\JoinColumn(name="roleID", referencedColumnName="id") 
*/ 
protected $role; 

,然後在用戶控制器做如下補充。它爲我工作

$company = $this->getEntityManager()->find('Auth\Entity\Company', $companyID);     
    $role = $this->getEntityManager()->find('Auth\Entity\Role', $roleID);     

    $user->username = $username; 
    $user->pass = $secPass; 
    $user->salt = $salt; 
    $user->company = $company; 
    $user->role = $role; 
    $user->cost = $cost;     

    $this->getEntityManager()->persist($user); 
    $this->getEntityManager()->flush(); 
+0

AFAIK,你不應該在你的實體屬性中具有ID。 –

+0

你不需要映射這些colums $ companyID和$ roleID,你可以使用$ this-> company-> getId()'和'$ this-> role-> getId()'。如果您經常需要,您也可以在實體中創建代理方法。 –