2012-10-22 5 views
1

I имеет следующие свойства ни столбцов в пользовательском enitityZF2 свойство doctrine2 отношений не работает

/** 
* 
* @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; 

я не имею роли столбца или компанию в таблице пользователей. Но я Хэ столбец Идентификатор роли и 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; 

В контроллере пользователя при попытке добавить запись, используя следующие строки добавляет запись успешно, но без Идентификатор роли и 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(); 

но если удалить эти два свойства из объекта пользователя, то он также добавить и 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, вы никогда не должны иметь идентификаторы в свойствах объекта. –

+0

Вам не нужно сопоставлять эти colums '$ companyID' и' $ roleID', вы можете использовать '$ this-> company-> getId()' и '$ this-> role-> getId()'. Вы также можете создавать прокси-методы в своей организации, если вам это нужно часто. –

Смежные вопросы