manyToOne создает новые продукты

Я пытаюсь реализовать Sylius Cart Bundle, но каждый раз, когда я добавляю товар в корзину, создается новый товар.

Вероятно, это ссылка на мою строчку:

cascade: ["persist", "remove"]

В моем файле YAML:

Pharmacie\FrontBundle\Entity\CartItem:
type: entity
table: app_cart_item    
manyToOne:
    produit:
        targetEntity: Pharmacie\FrontBundle\Entity\Product  
        cascade: ["persist", "remove"]                       
        joinColumn:
            name: product_id
            referencedColumnName: id 

Но если снять, то выдает ошибку:

Была обнаружена новая сущность через связь «Pharmacie \ FrontBundle \ Entity \ CartItem # produit», которая не была настроена для каскадного выполнения операций сохранения для объекта: 3test2. Чтобы решить эту проблему: либо явно вызовите EntityManager # persist () для этого неизвестного объекта, либо настройте каскад, чтобы сохранить эту связь в сопоставлении, например @ManyToOne (.., cascade = {"persist"})

Согласно доктрине, эта ошибка возникает при установке нового объекта. Но я получаю только существующий объект по идентификатору:

$product = $this->getProductRepository()->find($productId);
$item->setProduit($product); //this generates the error
$item->setUnitPrice(5); //this works fine

Я не понимаю, почему он сохраняется как новый объект.

Если я использую merge вместо persist, я получаю ту же ошибку:

Новый объект был найден через отношения ...


person Francois    schedule 09.06.2014    source источник
comment
Не могли бы вы показать форму?   -  person i.am.michiel    schedule 09.06.2014
comment
Спасибо за ваш интерес. Я не уверен, какую форму вы хотите увидеть. Если нужно добавить продукт, я просто звоню / cart / add? ProductId = 3, это 3 строки кода в моем вопросе. Если я прокомментирую строку setProduit, она работает, но product_id имеет значение null   -  person Francois    schedule 09.06.2014


Ответы (1)


Нашел (наконец ...)!

Я перепутал 2 менеджера сущностей. Вот почему доктрина все время хотела хранить его как новый объект.

Ошибка была в файле services.yml на слушателе.

Может быть, это поможет кому-то посмотреть в правильном направлении.

person Francois    schedule 09.06.2014