2

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、同じエラーが発生します。

関係を通じて新しいエンティティが見つかりました...

4

1 に答える 1

1

見つけた(やっと…)!

私は2つのエンティティマネージャーを混同していました。これが、ドクトリンがそれを常に新しいオブジェクトとして保存したかった理由です。

間違いは、リスナーの services.yml ファイルにありました。

誰かが良い方向を見るのに役立つかもしれません。

于 2014-06-09T15:21:17.367 に答える