Symfony 2.8. 기본 가져 오기 모드를 사용할 때 fetch = "EAGER"를 사용하여 중복 (이유는?)을 반환합니다. 모든 것이 정상입니다.Doctrine ORM, ManyToMany - 지연 가져 오기에서 복제
나는 다음과 같은 개체가 :
/**
* @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
내가 전화 $ 사용자 -> getRole() 결과를 은
ADMIN
EDITOR
EDITOR
ADMIN
EDITOR
이것은 기본 가져 오기 모드 (lazy)를 사용할 때만 twig/컨트롤러에서 발생합니다. fetch = "EAGER"이면 모든 것이 정상입니다.
어떤 아이디어가 잘못 되었나요? 덕분에
당신이 잘못된 결과 (컨트롤러/나뭇 가지)를 달성하는 방법을 보여줍니다 코드를 입력하십시오 추가하기 전에 존재하는지 확인해야합니다. 또한 두 경우 모두 어떤 쿼리가 실행되고 있는지 확인할 수 있습니다. Symfony의 프로파일 러에서이를 확인할 수 있습니다. –
이것은 아마 일종의 세션/직렬화 문제 일 것입니다. 로그인 한 하나의 사용자 개체에만 영향을 미칩니다. 그래서 문제는 다른 곳에서 발생합니다. –