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 マッピングがありません。

4

1 に答える 1

1

バリアント エンティティとアイテム エンティティの両方を永続化する必要があります。アイテムだけでなく、バ​​リアントにも関係を設定する必要があります。

于 2013-10-04T02:44:34.583 に答える