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
Когда я называю $ user-> getRole результат() is
ADMIN
EDITOR
EDITOR
ADMIN
EDITOR
Это происходит в ветви/контроллере только при использовании режима выборки по умолчанию (ленивый). Когда fetch = "EAGER", все в порядке.
Любые идеи, что я делаю неправильно? Благодаря
Укажите код, который показывает, как вы достигаете неправильные результаты (контроллер/ветка). Также вы можете проверить, какие запросы выполняются в обоих случаях. Вы можете проверить это в профилировщике Symfony. –
Я заметил, что это, вероятно, какая-то проблема с сеансом/сериализацией - она затрагивает только один объект User - который я вошел в систему. Поэтому проблема в другом месте. –