我目前正在关注Symfony教程,并且我已经进入了Doctrine双向关系的一部分(对不起,如果我使用的术语错了,我不是本地人英语母语者)。我的模型基于一个广告(一对多),该广告显示了对此广告的一系列应用程序(多对一)。因此,必须将应用程序链接到广告,因此nullable false
:
class Application
{
/**
* @ORMManyToOne(targetEntity="AppEntityAdvert", inversedBy="applications")
* @ORMJoinColumn(nullable=false)
*/
private $advert;
//
}
,我在广告类中添加了$applications
属性:
class Advert
{
/**
* @ORMOneToMany(targetEntity="AppEntityApplication", mappedBy="advert")
*/
private $applications;
//
}
但是,当我使用php bin/console make:entity --regenerate
时,要获取removeApplication()
函数,我得到的代码如下:
public function removeApplication(Application $application): self
{
if ($this->applications->contains($application)) {
$this->applications->removeElement($application);
// set the owning side to null (unless already changed)
if ($application->getAdvert() === $this) {
$application->setAdvert(null);
}
}
return $this;
}
该函数将应用程序的$advert
设置为NULL,而此属性则将其明确设置为nullable = false
。我注意到了这种不一致之处,因为我使用的是Symfony 4,而我关注的教程是基于较旧版本的,因此教程中生成的功能更简单,并且没有处理$advert
属性。
知道为什么会发生这种情况以及我的项目以后是否可能导致错误?让我知道您是否需要更多代码来理解问题。
对我来说确实是一个错误,它们可能无法处理发电机内部的无效案例。
也许在关系的广告方面尝试orphanremoval,这将很有趣,然后会发生什么:
class Advert
{
/**
* @ORMOneToMany(targetEntity="AppEntityApplication", mappedBy="advert", orphanRemoval=true)
*/
private $applications;
}