Как проверить уникальность сущностей в коллекции сущностей в symfony2

У меня есть объект с отношением OneToMany к другому объекту, когда я сохраняю родительский объект, я хочу убедиться, что дочерние элементы не содержат дубликатов.

Вот классы, которые я использовал,discounts Коллекция не должна содержать два продукта с одинаковым именем для данного клиента.

У меня есть клиентская сущность с набором скидок:

/**
 * @ORM\Entity
 */
class Client {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=128, nullable="true")
     */
    protected $name;

    /**
     * @ORM\OneToMany(targetEntity="Discount", mappedBy="client", cascade={"persist"}, orphanRemoval="true")
     */
    protected $discounts;

}

/**
 * @ORM\Entity
 * @UniqueEntity(fields={"product", "client"}, message="You can't create two discounts for the same product")
 */
    class Discount {
        /**
         * @ORM\Id
         * @ORM\Column(type="string", length=128, nullable="true")
         */
        protected $product;

        /**
         * @ORM\Id
         * @ORM\ManyToOne(targetEntity="Client", inversedBy="discounts")
         * @ORM\JoinColumn(name="client_id", referencedColumnName="id")
         */
        protected $client;

        /**
         * @ORM\Column(type="decimal", scale=2)
         */
        protected $percent;
    }

Я пытался с помощьюUniqueEntity для класса Discount, как вы можете видеть, проблема в том, что кажется, что валидатор проверяет только то, что загружено в базу данных (которая пуста), поэтому, когда сущности сохраняются, я получаю «SQLSTATE [23000]: ограничение целостности». нарушение & Quot ;.

Я проверилКоллекция Ограничение покупки, похоже, обрабатывает только наборы полей, а не сущностей.

Есть такжеВсе валидатор, который позволяет вам определять ограничения, которые будут применяться для каждой сущности, но не для коллекции в целом.

Мне нужно знать, если есть ограничения коллекции сущностей в целом, прежде чем сохранять в базе данных, кроме записипользовательский валидатор или писатьПерезвоните валидатор каждый раз.

Ответы на вопрос(2)

Ваш ответ на вопрос