Symfony实体检查ArrayCollection(如果已存在),然后执行更新

时间:2013-07-09 13:45:00

标签: symfony doctrine-orm

对于Collection,我想检查数据库中是否已存在新添加的Part。如果是这样,它将被新值覆盖。

  

/**
 * Add Part
 */
public function addPart(\MyBundle\Entity\FooTypePart $Part)
{
    $part->setProduct($this);
    $this->part[] = $part;

    return $this;
}

/**
*/
public function removePart(\MyBundle\Entity\FooTypePart $part)
{
    $this->part->removeElement($part);
}

/**
 * Get Part
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getPart()
{
    return $this->part;
}

/**
 * Set Part
 */
public function setPart($part)
{
    $this->part = $part;
    return $this;
}

零件实体具有:ID,Category_id(FK),Product_id(FK),零件(集合)

现在可以添加具有相同名称的新零件,当已经存在具有相同Product_id和Category_id的零件时也是如此。 使零件唯一不是修复,因为零件可用于许多产品/类别。

以下示例已存在于数据库中,具有不同的“部分”。所以它应该做一个更新命令。

<?php
$part = new FooTypePart();
$part->setCategory($specification);
$part->setProduct($product);
$part->setPart('DifferentNamingThenCurrentOne');
$xx->addSpecificationValue($part);

如何? : - )

1 个答案:

答案 0 :(得分:0)

只需使用UniqueEntity验证程序即可找到集合中已存在的项目。

您可以使用多个属性或repository method指定唯一性。这样,您就可以搜索仅具有name,product-id和category-id的唯一组合的项目。

创建验证组,即“唯一”,并通过查找无效实体来查找集合中的非唯一/存在实体。

...然后使用您的新值更新现有实体。您可能需要一些额外的逻辑,因为可能会有多个具有相同名称的字段添加到您的表单集合中。