Symfony 2.8。当使用默认提取模式时,返回重复项(为什么?),使用fetch =" EAGER" - 一切都好。
我有以下对象:
/**
* @ORM\Entity()
*/
class User implements AdvancedUserInterface, \Serializable
{
(...)
/**
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users")
* @ORM\JoinTable(name="user_role",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")}
* )
*/
private $role;
public function addRole(\WerbeoBundle\Entity\Role $role)
{
$this->role[] = $role;
return $this;
}
public function removeRole(\WerbeoBundle\Entity\Role $role)
{
$this->role->removeElement($role);
}
public function getRole()
{
return $this->role;
}
作用:
/**
* @ORM\Entity()
*/
class Role
{
(...)
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="role")
*/
private $users;
(... and getters/setters ...)
现在我有以下表user_role:
user_id | role_id
1 | ADMIN
1 | EDITOR
当我拨打$ user-> getRole()时,结果是
ADMIN
EDITOR
EDITOR
ADMIN
EDITOR
仅在使用默认提取模式(延迟)时才会在树枝/控制器中发生这种情况。当fetch =" EAGER"一切都好。
任何想法我做错了什么? 感谢
答案 0 :(得分:0)
在添加
之前,您必须检查条目是否已存在public function __construct()
{
$this-role = new \Doctrine\Common\Collections\ArrayCollection()
}
public function addRole(\WerbeoBundle\Entity\Role $role)
{
if(!$this->role->contains($role)){
$this->role->add($role)
}
return $this;
}