实体不正确关联 [英] Entity doesn't associate correctly
问题描述
我有下一个关系:
Presupuesto: oneToMany with Revision
Revision: oneToMany with Capitulo
Capitulo: oneToMany with Requisito
Requisito: oneToMany with Articulo
我有一个表单嵌入这些实体和'addTagForm'集合。问题是,当我提交表单时,除了修订版本
与 Capitulo
之外,所有内容都正确关联,它们关联为null
I have a form embedded with these entities and 'addTagForm' set. The problem is that when I submit the form, everything is associated correctly except from Revision
with Capitulo
, which associates as null.
以下是关于这两个实体的最相关信息:
Below there's the most relevant information about these two entities:
Revision.php
Revision.php
/**
* @ORM\OneToMany(targetEntity="CeiferIT\ComercialBundle\Entity\Capitulo", mappedBy="revision", cascade={"persist"}, orphanRemoval=true)
*/
protected $capitulos;
/**
* @param \CeiferIT\ComercialBundle\Entity\Capitulo $capitulo
*
* @return Revision
*/
public function addCapitulo(\CeiferIT\ComercialBundle\Entity\Capitulo $capitulo)
{
$capitulo->setRevision($this);
$this->capitulos[] = $capitulo;
return $this;
}
/**
* @param \CeiferIT\ComercialBundle\Entity\Capitulo $capitulo
*/
public function removeCapitulo(\CeiferIT\ComercialBundle\Entity\Capitulo $capitulo)
{
$this->capitulos->removeElement($capitulo);
}
/**
* @return \Doctrine\Common\Collections\Collection
*/
public function getCapitulos()
{
return $this->capitulos;
}
Capitulo.php
Capitulo.php
/**
* @ORM\ManyToOne(targetEntity="CeiferIT\ComercialBundle\Entity\Revision", inversedBy="capitulos", cascade={"persist"})
* @ORM\JoinColumn(name="revision_id", referencedColumnName="id")
*/
private $revision;
/**
* @param \CeiferIT\ComercialBundle\Entity\Revision $revision
*
* @return Capitulo
*/
public function setRevision(\CeiferIT\ComercialBundle\Entity\Revision $revision = null)
{
$this->revision = $revision;
return $this;
}
/**
* @return \CeiferIT\ComercialBundle\Entity\Revision
*/
public function getRevision()
{
return $this->revision;
}
nuevo.html.twig
nuevo.html.twig
{{ form_start(formulario) }}
//some code..
{% include 'ComercialBundle:Presupuesto:listaRevisiones.html.twig' %}
//some code..
{{ form_end(formulario) }}
listaRevisiones.html.twig
listaRevisiones.html.twig
{% macro information_prototype(revision) %}
{% if form_errors(revision.total) %}
{{ form_widget(revision.total, {'attr': {'class': 'form-control totalrevision error'}}) }}
{% else %}
{{ form_widget(revision.total, {'attr': {'class': 'form-control totalrevision'}}) }}
{% endif %}
{% include 'ComercialBundle:Presupuesto:listacapitulos.html.twig' %}
{% endmacro %}
<div class="ibox product-box active primerarevision" data-prototype="{{ _self.information_prototype(formulario.revisiones.vars.prototype)|e}}">
{% for revision in formulario.revisiones %}
{{ _self.information_prototype(revision)}}
{% endfor %}
</div>
我不知道为什么 revision_id
是null 。有任何想法吗?谢谢
I cannot figure out why revision_id
is null. Any ideas? Thanks
推荐答案
您使用的是不属于该关系的Revision对象,因此默认情况下不会检查并持续原则。
You work on Revision object which is not owning side of that relation so by default it will not be checked and persisted by Doctrine.
重要的是您可以使用拥有方实体(一个 JoinColumn
)。
It's important that you work on owning-side entity (one with JoinColumn
).
添加到您的控制器(验证表单后):
Add to your controller (after validating form) this:
$capitulo->setRevision($revision);
$em->flush();
阅读更多: http://docs.doctrine-project.org/en/latest/reference/unitofwork-associations.html#important-concepts
这篇关于实体不正确关联的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!