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”找到了一个新实体,该关系未配置为对实体进行级联持久化操作:
变体@0000000034ce4ce4000000000391db0d。要解决这个问题:要么在这个未知实体上显式调用 EntityManager#persist(),要么配置级联在映射中保持此关联,例如 @ManyToOne(..,cascade={"persist"})。
如果您无法找出导致问题的实体,请执行“Variant#__toString()”以获得线索。

购物车.xml

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

购物车项目.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 映射。

4

1 回答 1

1

您需要保留变体和项目实体。您还应该设置变体的关系,而不仅仅是项目。

于 2013-10-04T02:44:34.583 回答