У меня такое отношение:
В UserRole
/**
* @ORM\ManyToOne(targetEntity="Brand", inversedBy="managers")
* @ORM\JoinColumn(referencedColumnName="id")
*/
private $brandManage;
В бренде
/**
* @ORM\OneToMany(targetEntity="UserRole", mappedBy="brandManage")
*/
private $managers;
в Пользователе
/**
* @ORM\OneToOne(targetEntity="UserRole", mappedBy="user", cascade={"persist"})
*/
private $role;
Сейчас Я пытаюсь присвоить бренду brandManage
в UserRole
, но база данных не обновляется; отношение всегда равно NULL, даже если объект правильно обновлен перед сохранением (проверено с помощью дампа)
Для решения вопроса я использовал три метода сохранения, как вы можете видеть ниже; ни один из них не работает! Я также вставил die;
после с теми же результатами
$userRole->setBrandManage($brand);
$userRoleRepository->save($userRole);
$user->setRole($userRole);
$userRepository->save($user);
$this->em->persist($userRole);
$this->em->persist($user);
$this->em->flush();
Теперь я заметил, что если я создаю новый UserRole
, отношение сохраняется правильно, но никогда, если я обновляю существующий UserRole
.
Итак, я пытался всегда создавать новый, но по какой-то причине doctrine не сохраняет новый UserRole
, потому что он говорит, что UserRole
с тем же идентификатором пользователя уже существует в базе данных, но это НЕ . Мне нужно сохранить второй раз для создания нового UserRole
...
EDIT: Если я сделаю следующую последовательность, она сработает, но не имеет смысла делать это так сложно .... Почему не могу я просто сохранить роль? Этот обходной путь эффективно создает новый UserRole
, удаляя его перед повторным сохранением ... Итак, вернемся к исходной проблеме
$userRole->setBrandManage($brand);
$userRoleRepository->save($userRole);
$user->setRole($userRole);
$userRepository->save($user);
$this->em->remove($user->getRole());
$this->em->flush();
$this->em->persist($userRole);
$this->em->persist($user);
$this->em->flush();