我在一个实体中有一个多对一的关系,如下所示:
class License {
// ...
/**
* Customer who owns the license
*
* @var \ISE\LicenseManagerBundle\Entity\Customer
* @ORM\ManyToOne(targetEntity="Customer", inversedBy="licenses")
* @ORM\JoinColumn(name="customer_id", referencedColumnName="id")
*/
private $customer;
// ...
}
class Customer {
// ...
/**
* Licenses that were at one point generated for the customer
*
* @var \Doctrine\Common\Collections\ArrayCollection
* @ORM\OneToMany(targetEntity="License", mappedBy="customer")
*/
private $licenses;
// ...
}
这会生成一个数据库模式,在许可证表的“customer_id”字段允许为空,而这正是我不想要的。
以下是一些代码,我创建了一个记录来证明它确实允许引用字段为空值:
$em = $this->get('doctrine')->getEntityManager();
$license = new License();
// Set some fields - not the reference fields though
$license->setValidUntil(new \DateTime("2012-12-31"));
$license->setCreatedAt(new \DateTime());
// Persist the object
$em->persist($license);
$em->flush();
基本上,我不想让License在没有分配给客户的情况下被持久化。是否需要设置某些注解,或者我只需要求将Customer对象传递给我的License构造函数?
我使用的数据库引擎是MySQL v5.1,并且我正在一个Symfony2应用程序中使用Doctrine 2。
@Column
和@JoinColumn
注释中有一个nullable
选项。将其设置为false会导致我想要的行为。 - Tobias Gies