0

コレクションの場合、新しく追加されたパーツがデータベースに既に存在するかどうかを確認したいと思います。もしそうなら、それは新しい値で上書きされます。

/**
 * 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;
}

Part エンティティには、ID、Category_id (FK)、Product_id (FK)、Part (コレクション) があります。

現時点では、同じ Product_id と Category_id を持つパーツが既に存在する場合でも、同じ名前の新しいパーツを追加できます。パーツは多くの製品/カテゴリに使用できるため、パーツを一意にすることは解決策ではありません。

次の例は、別の「パーツ」でデータベースに既に存在します。したがって、更新コマンドを実行する必要があります。

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

どのように?:-)

4

1 に答える 1

0

UniqueEntityバリデーターを使用して、コレクション内の既存のアイテムを見つけるだけです。

複数のプロパティまたはリポジトリ メソッドを使用して一意性を指定できます。このようにして、name、product-id、category-id の一意の組み合わせを持つアイテムのみを検索できます。

検証グループ、つまり「一意」を作成し、無効なエンティティを探して、コレクション内の一意でない/存在しないエンティティを見つけます。

...次に、既存のエンティティを新しい値で更新します。フォーム コレクションに同じ名前のフィールドが複数追加される可能性があるため、追加のロジックが必要になる可能性があります。

于 2013-07-10T03:00:48.633 に答える