У меня есть сущность с отношением OneToMany к другому объекту, когда я сохраняю родительский объект, я хочу, чтобы у детей не было дубликатов.
Здесь классы, которые я использовал, коллекция скидок не должна содержать двух продуктов с тем же именем для данного клиента.
У меня есть объект Client с набором скидок:
/**
* @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]: нарушение ограничения целостности".
Я проверил Collection buy, похоже, обрабатывает только коллекции полей, а не сущностей.
Также существует валидатор All, который позволяет определять ограничения, которые должны применяться для каждого объекта, но не для коллекции в целом.
Мне нужно знать, существуют ли ограничения коллекции объектов в целом, прежде чем они будут сохраняться в базе данных, кроме написания настраиваемого валидатора или написания Callback валидатор каждый раз.