2016-02-23 55 views
0

我的下一個關係:實體沒有關聯正確

Presupuesto: oneToMany with Revision 
Revision: oneToMany with Capitulo 
Capitulo: oneToMany with Requisito 
Requisito: oneToMany with Articulo 

我有嵌入式與這些實體和「addTagForm」集的形式。問題是,當我提交表單時,除RevisionCapitulo之外的所有內容都正確關聯,該關聯關聯爲空。

下面有關於這兩個實體最相關的信息:

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

/** 
* @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

{{ form_start(formulario) }} 
//some code.. 
{% include 'ComercialBundle:Presupuesto:listaRevisiones.html.twig' %} 
//some code.. 
{{ form_end(formulario) }} 

l istaRevisiones.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爲空。有任何想法嗎?謝謝

+0

你能在你的控制器檢查,如果在表單中的數據實際上是設置正確。因此,這將是'var_dump()':'$ form-> getData() - > getRevisions() - > getCapitulos();'。 這樣我們可以找出問題出在表單聲明還是在Doctrine中。 –

+0

是的,當我做轉儲($ form-> getData())時,Capitulo出現,但其版本屬性爲null –

回答

1

你在Revision對象上工作,它不是擁有該關係的一面,所以默認情況下它不會被Doctrine檢查和持久化。

重要的是你在自己一方的實體(一個與JoinColumn)工作。

添加到您的控制器(驗證表單後)這一點:

$capitulo->setRevision($revision); 
$em->flush(); 

在這裏閱讀更多:http://docs.doctrine-project.org/en/latest/reference/unitofwork-associations.html#important-concepts

+0

我無法更改關係,因爲它必須是Revision OneToMany Capitulos –

+0

然後,您需要在控制器中手動執行' $ capitulo-> setRevision($ revision);'然後刷新。 –

+0

對,我這樣做,它的工作原理,但希望它是自動的,通過AddTag作爲其他關係工作,謝謝! –