У меня проблема с «Doctrine2». При попытке сохранить связь «ManyToMany» или «OneToOne» PHP оставляет ошибку исключения! Я оставляю ошибку, чтобы вы могли мне помочь.
Неустранимая ошибка: исключить исключение «InvalidArgumentException» с сообщением «Новый объект, найденный через объекты« Связь »\ Пользователь # привилегия» Это не настроено на каскадное сохранение. Операции для объекта: Entities \ Privilege @ 0000000012feb12000000000616126d4. Явно или сохраняйте новый объект, настроенный каскадом, сохраняйте операции над этим отношением. Если вы не можете узнать, что вызывает проблему, реализуя сущность Entities \ Privilege # __toString () ', чтобы получить ключ. "в C: \ Program Files \ EasyPHP-5.3.4.0 \ www \ mframework_2 \ phpinc \ Doctrine \ ORM \ UnitOfWork.php в строке 576
Код, который я использую, чтобы сохранить отношения:
$ user = new \ Entities \ User (); $ User-> SetActive (истина); $ User-> setUsername ( 'ххх'); $ User-> SetPassword ( 'ххх'); $ email = new \ Entities \ Email (); $ Email-> setEmail (ххх '); $ Email-> SetType ( 'ххх'); $ User-> AddEmail ($ электронная почта); $ This-> em-> сохраняются ($ пользователю); $ This-> em-> заподлицо ();
В Entitie User у меня есть следующее:
/** @OneToOne(targetEntity="Privilege") */ protected $privilege;
У меня такая же проблема, как и многие отношения ManyToMany!
Большое спасибо!
Добавьте cascade = {"persist"} в свое привилегированное поле:
/** @OneToOne(cascade={"persist"}, targetEntity="Privilege") */ protected $privilege;
Выполните одно из следующих действий:
1- использование сохраняется для объектов пользователя и электронной почты
$this->em->persist($user); $this->em->persist($email); $this->em->flush();
по$this->em->persist($user); $this->em->persist($email); $this->em->flush();
или
2- добавить каскад в вашу организацию
/** @OneToOne(targetEntity="Privilege", cascade={"persist"}) */