У меня есть 2 сопоставленных объекта ,
коробка
class Box{ //[...] /** * @ORM\ManyToMany(targetEntity="Candy", cascade={"remove"}) * @ORM\OrderBy({"power" = "DESC"}) * @ORM\JoinTable(name="box_candies", * joinColumns={@ORM\JoinColumn(name="box_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="candy_id", referencedColumnName="id", unique=true)} * ) */ private $candies; }
И конфеты
class Candy { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\Column(name="name", type="string", length=255) */ private $name; //[...] }
Как вы можете видеть, это односторонняя, однонаправленная с ассоциацией Join Table . Box может «хранить» конфеты, но Candy ничего не знает о Box (где есть).
Теперь у меня есть страница, где я могу сделать конфету, и есть форма и стандарт isValid()
и после этого:
$box->addCandy($candy); $entity_manager->persist($candy); $entity_manager->persist($box); $entity_manager->flush();
Теперь, где моя проблема?
Я бы хотел, чтобы Box мог хранить только уникальные конфеты (по имени ), это означает, что Box может хранить объекты Candy с именами «Choco» и «Orange», но не может «Майонез» и «Майонез»,
Когда вы делаете конфеты, я не могу проверить с UniqueEntity
ограничения UniqueEntity
потому что конфеты не знают о коробке. Я подумал о валидаторе Callback
для Box или создать собственное ограничение, но я думаю, что лучше спросить:
Как я должен это делать?