一对多关系刷新时出现错误

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

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

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

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

在执行flush()时,我遇到了以下错误:
发现一个新实体通过关系'CartItem#variant',但未配置级联持久化操作的实体:
Variant@0000000034ce4ce4000000000391db0d。解决此问题的方法是:要么在此未知实体上显式调用EntityManager#persist(),要么在映射中配置级联持久化此关联,例如@ManyToOne(..,cascade = {"persist"})。
如果您无法找出哪个实体引起了问题,请实现'Variant#__toString()'以获取提示。

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映射。

你是否有多个实体管理器?具体来说,变量存储库是否使用与购物车实体相同的实体管理器? - Cerad
是的,这两个实体都使用 $em = $this->container->get('doctrine.orm.default_entity_manager'); - Ricardo Simas
1个回答

1
你需要持久化变体和项目实体。你还应该在变体上设置关系,而不仅仅是在项目上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接