我有 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;
//[...]
}
如您所见,这是一对多、单向和连接表关联。Box 可以“存储”糖果,但 Candy 对 Box(在哪里)一无所知。
现在我有了可以制作糖果的页面,并且有表格和标准isValid()
,然后:
$box->addCandy($candy);
$entity_manager->persist($candy);
$entity_manager->persist($box);
$entity_manager->flush();
现在,我的问题在哪里?
我想 Box 只能存储唯一的糖果(按名称),这意味着 Box 可以存储名称为“Choco”和“Orange”但不能存储“蛋黄酱”和“蛋黄酱”的糖果对象
制作糖果时,我无法进行UniqueEntity
约束验证,因为糖果不知道盒子的存在。我考虑过Callback
Box 的验证器或创建自己的约束,但我认为最好问:
我该怎么做?