Symfony 4与Doctrine:为何生成多个$__EXTRA_LINE变量声明?
解决Doctrine CLI生成ManyToOne关联时的
$__EXTRA__LINE变量错误问题 嘿,我之前也踩过这个坑!你遇到的这些$__EXTRA__LINE变量完全是Doctrine代码生成工具的bug,跟你的代码逻辑或者关联配置半毛钱关系都没有,咱们一步步说清楚:
错误原因
这些$__EXTRA__LINE是Doctrine内部模板生成时的残留标记——工具原本用它来占位需要填充的空白行,但生成代码的时候没把这些标记清理掉,反而直接输出成了实际代码。这就造成了两个实打实的错误:
- 类里重复声明了三次
private $__EXTRA__LINE;,PHP会直接报错变量重复定义; - 在
addJobInvoice和removeJobInvoice方法里,代码直接写了$__EXTRA__LINE;而不是$this->__EXTRA__LINE,又触发了未定义变量的错误。
这个变量有特殊意义吗?完全没有!
别纠结这个变量了,它对ManyToOne关联的正常运行没有任何作用——既不是Doctrine要求的关联属性,也不是任何业务逻辑需要的变量,纯粹是生成过程中遗留的垃圾代码。
快速解决办法
直接手动删掉所有和$__EXTRA__LINE相关的代码就行:
- 把类里的三个
private $__EXTRA__LINE;声明全部删掉; - 把
addJobInvoice和removeJobInvoice方法里的$__EXTRA__LINE;语句也删掉。
清理后的正确代码应该是这样的:
/** * @return Collection|JobInvoice[] */ public function getJobInvoices(): Collection { return $this->job_invoices; } public function addJobInvoice(JobInvoice $jobInvoice): self { if (!$this->job_invoices->contains($jobInvoice)) { $this->job_invoices[] = $jobInvoice; $jobInvoice->setInvoice($this); } return $this; } public function removeJobInvoice(JobInvoice $jobInvoice): self { if ($this->job_invoices->contains($jobInvoice)) { $this->job_invoices->removeElement($jobInvoice); // set the owning side to null (unless already changed) if ($jobInvoice->getInvoice() === $this) { $jobInvoice->setInvoice(null); } } return $this; }
处理完之后再运行php bin/console make:migration就不会报错了,你的ManyToOne关联也能正常工作。
内容的提问来源于stack exchange,提问作者DevLime
相关产品推荐
相关产品推荐

