我正在尝试实施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
,我会收到同样的错误:
通过这种关系找到了一个新实体......
答案 0 :(得分:1)
找到它(最后......)!
我有2个实体经理混淆了。这就是为什么这个学说要一直把它作为一个新的对象存储起来。
错误发生在services.yml文件中,在侦听器上。
也许它可以帮助别人看好方向。