实体不正确关联 [英] Entity doesn't associate correctly

查看:106
本文介绍了实体不正确关联的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有下一个关系:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆