2013-10-03 16 views
3
$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: 
[email protected] 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 mappin G。

+0

你有多個實體經理嗎?具體而言,變體存儲庫是否使用與購物車實體相同的實體管理器? – Cerad

+0

是的,兩個實體都使用'$ em = $ this-> container-> get('doctrine.orm.default_entity_manager');' –

回答

1

您需要保留變體和項目實體。你也應該在變體上設置關係,而不僅僅是項目。