Ошибка при сбросе отношения "один ко многим"

$cart = new Cart();
$item = new CartItem();

$variant = $repository->findOneById($variantId);

$item->setVariant($variant);
$cart->addItem($item);

$em->persist($cart);
$em->flush();

flush() я получил следующую ошибку:

A new entity was found through the relationship 'CartItem#variant' that was not configured to cascade persist operations for entity:
Variant@0000000034ce4ce4000000000391db0d. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}). 
If you cannot find out which entity causes the problem implement 'Variant#__toString()' to get a clue.

Cart.xml

<one-to-many target-entity="CartItem" field="items" mapped-by="cart">
    <cascade>
        <cascade-persist/>
    </cascade>
</one-to-many>

CartItem.xml

<many-to-one field="cart" target-entity="Cart" inversed-by="items">
  <join-column name="cart_id" referenced-column-name="id" nullable="false" />
</many-to-one>
<many-to-one field="variant" target-entity="Variant">
    <join-column name="variant_id" referenced-column-name="id" nullable="false" />
</many-to-one>

В Variant.xml у меня нет сопоставления CartItem.


person Ricardo Simas    schedule 03.10.2013    source источник
comment
У вас несколько менеджеров организаций? В частности, использует ли репозиторий вариантов тот же диспетчер сущностей, что и сущности корзины?   -  person Cerad    schedule 03.10.2013
comment
Да, оба объекта используют $em = $this->container->get('doctrine.orm.default_entity_manager');   -  person Ricardo Simas    schedule 03.10.2013


Ответы (1)


Вам необходимо сохранить как вариант, так и сущность номенклатуры. Вы также должны установить связь для варианта, а не только для элемента.

person Dr.Knowitall    schedule 04.10.2013