将实体添加到双向DoctrineCollection中

时间:2014-04-09 21:56:30

标签: php entity-framework symfony doctrine-orm doctrine

我有2个Doctrine2实体:

class Product {
   /**
   * @ORM\OneToMany(targetEntity="ProductVendor", mappedBy="product")
   */
   protected $productVendors;

   //....
}

class ProductVendor {
   /**
   * @ORM\ManyToOne(targetEntity="Product", inversedBy="productVendors")
   */
   protected $product;

   //....
}

这些实体中的每一个都有标准的getter和setter,我为了简洁而遗漏了这些。我正在向ProductVendor添加一个新产品,如下所示:

$myProductVendor->setProduct($myProduct);

当我循环使用$ myProduct的ProductVendors时,新的ProductVendor不在那里。它仅包含该产品的现有ProductVendors。据我了解,该学说关系将负责将相关实体添加到关系的两个方面。我错过了什么?

2 个答案:

答案 0 :(得分:1)

由于它是双向的,您需要更新双方的关联。

e.g。

$myProductVendor->setProduct($myProduct);
$product->addProductVendor($myProductVendor);

答案 1 :(得分:0)

为了更好的行为,请在级联的持久字段中添加:

public function addProductVendor(\Project\YourBundle\Entity\ProductVendor $productVendor)
{
    $productVendor->setProduct($this);
    $this->productVendors[] = $productVendor;

    return $this;
}