manyToOne正在创造新产品

时间:2014-06-09 13:33:19

标签: symfony doctrine-orm sylius

我正在尝试实施Sylius Cart Bundle,但每次我将产品添加到购物车时,都会创建一个新产品。

这可能链接到我的行:

cascade: ["persist", "remove"]

在我的YAML文件中:

Pharmacie\FrontBundle\Entity\CartItem:
type: entity
table: app_cart_item    
manyToOne:
    produit:
        targetEntity: Pharmacie\FrontBundle\Entity\Product  
        cascade: ["persist", "remove"]                       
        joinColumn:
            name: product_id
            referencedColumnName: id 

但是如果把它取下来,我会收到一个错误:

  

通过关系'Pharmacie \ FrontBundle \ Entity \ CartItem #produit'找到了一个新实体,该关系未配置为对实体进行级联持久操作:3test2。要解决此问题:在此未知实体上显式调用EntityManager#persist()或在映射中配置级联持久保存此关联,例如@ManyToOne(..,cascade = {“persist”})

根据doctrine doc,设置新对象时会发生此错误。 但我只是通过ID获取现有对象:

$product = $this->getProductRepository()->find($productId);
$item->setProduit($product); //this generates the error
$item->setUnitPrice(5); //this works fine

我不明白为什么它会保存为新对象。

如果我使用merge代替persist,我会收到同样的错误:

  

通过这种关系找到了一个新实体......

1 个答案:

答案 0 :(得分:1)

找到它(最后......)!

我有2个实体经理混淆了。这就是为什么这个学说要一直把它作为一个新的对象存储起来。

错误发生在services.yml文件中,在侦听器上。

也许它可以帮助别人看好方向。