Php zf2 doctrine2关系属性不工作
我在用户entity中没有以下列属性Php zf2 doctrine2关系属性不工作,php,doctrine-orm,doctrine,zend-framework2,Php,Doctrine Orm,Doctrine,Zend Framework2,我在用户entity中没有以下列属性 /** * * @ORM\ManyToOne(targetEntity="\Auth\Entity\Company", inversedBy="user") * @ORM\JoinColumn(name="companyID", referencedColumnName="id") */ protected $company; /** * * @ORM\ManyToOne(targetEntity="\Auth\Entity\Role", i
/**
*
* @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;
我在用户表中没有列角色或公司。
但我在用户表中有roleID列和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;
/**
*
* @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;
在用户控制器中,当我尝试使用以下行添加记录时,它成功地添加了记录,但没有roleID和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();
protected $company;
protected $role;
但如果我从实体用户中删除这两个属性,那么它也会添加roleID和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();
protected $company;
protected $role;
但我也需要以上属性。我无法理解为什么会发生这种冲突
有人面临这个问题吗?如何解决这个问题?有什么想法吗 在用户实体中更改属性,如下所示
/**
* @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;
/**
*
* @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();
更改用户实体中的属性,如下所示
/**
* @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;
/**
*
* @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();
好了,您的实体属性中不应该有ID。您不需要映射这些列
$companyID
和$roleID
,您可以使用$this->company->getId()
和$this->role->getId()
。如果您经常需要,也可以在实体中创建代理方法。好的,您的实体属性中不应该有ID。您不需要映射这些列$companyID
和$roleID
,您可以使用$this->company->getId()
和$this->role->getId()
。如果经常需要,还可以在实体中创建代理方法。