У меня 2 отображенные объекты,Validate UniqueEntity для One-To-Many, однонаправленный с Join Table [Symfony2]
Box
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;
//[...]
}
, как вы может видеть, это Один-ко-многим, однонаправленный с объединением таблицы ассоциации. Box может «хранить» конфеты, но Candy ничего не знает о Box (где есть).
Теперь у меня есть страница, где я могу сделать конфеты и есть форма и стандарт isValid()
и после этого:
$box->addCandy($candy);
$entity_manager->persist($candy);
$entity_manager->persist($box);
$entity_manager->flush();
Теперь, где моя проблема?
Я хотел бы Box можно хранить только уникальные конфеты (по имени), это означает, что ячейка может хранить конфеты объекты с именами «Choco» и «Orange», но не может «Майонез» и «майонез»
При изготовлении конфет я не могу подтвердить с помощью UniqueEntity
ограничение, потому что конфеты не знают о коробке. Я думал о Callback
валидаторе для коробки или создать собственное ограничение, но я думаю, что лучше спросить:
Как мне это сделать?
См. [Это сообщение] (http://stackoverflow.com/a/18894942/1307183) - вы должны поместить 'UniqueEntity' в поле' name' вашего объекта Candy. Когда вы делаете аннотацию '@ ManyToMany' в своем ядре, Doctrine автоматически обрабатывает это как составной первичный ключ для вас и обеспечивает уникальность именно так, как вы хотите. –
Нет, в моем случае 'name' не является уникальным значением – Griva
Почему это не уникальное значение? –