Доктрина слияния не работает, как ожидалось - PullRequest
0 голосов
/ 19 ноября 2018

Я получаю следующие данные json от клиента. JSON содержит информацию о родительских и дочерних элементах, как показано ниже -

{
  id : 1,
  name : "Parent"
  children : [
      { id : 1, name : "A" },
      { id : 2, name : "B" }
   ]
}

Я сопоставляю эти данные JSON с Родителем и Дочерним Объектом.

Родитель

class Parent{


    /** @Id @Column(type="integer",name="order_no") @GeneratedValue * */
    protected $id;

     /**
     * @OneToMany(targetEntity="Child",cascade={"merge"}, mappedBy="parent" )
     */
    protected $children;

}

Child

class SalesOrderDetail extends BaseEntity {

    /** @Id @Column(type="integer") @GeneratedValue * */
    protected $id;

    /**
     * @ManyToOne(targetEntity="parent")
     * @JoinColumn(name="parent_id")
     */
    protected $salesOrder;

}

Пока все хорошо.

Теперь проблема в том, когда я пытаюсь объединить родительский элемент

$em->merge($parent)

Я получаю следующую ошибку. Примечание. Весь родительский и дочерний объекты являются неуправляемыми, поэтому я пытаюсь объединить их. Если я просто объединяю parent, он работает, но находит ошибку, если я пытаюсь сохранить все содержимое parent и его потомков.

Тип: Doctrine \ ORM \ ORMInvalidArgumentException Сообщение: несколько непостоянные новые объекты были найдены через данную ассоциацию график: * Новая связь была найдена через отношения 'Ziletech \ Database \ Entity \ Parent # itemSet', который не был настроен на Каскадное сохранение операций для объекта: Ziletech \ Database \ Entity \ Child @ 0000000052218380000000007058b4a6. к решить эту проблему: либо явно вызовите EntityManager # persist () на этот неизвестный объект или настроить каскад сохраняют эту связь в отображение, например, @ManyToOne (.., cascade = {"persist"}). если ты не может выяснить, какой объект вызывает проблему реализовать 'Ziletech \ Database \ Entity \ Child #__ toString ()', чтобы получить подсказку. * Новый сущность была найдена через отношения 'Ziletech \ Database \ Entity \ Parent # itemSet', который не был настроен на Каскадное сохранение операций для объекта: Ziletech \ Database \ Entity \ Child @ 0000000052218071000000007058b4a6. к решить эту проблему: либо явно вызовите EntityManager # persist () на этот неизвестный объект или настроить каскад сохраняют эту связь в отображение, например, @ManyToOne (.., cascade = {"persist"}). если ты не может выяснить, какой объект вызывает проблему реализовать 'Ziletech \ Database \ Entity \ Child #__ toString ()', чтобы получить подсказку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...