Symfony3实体属性未通过OneToMany关联方法更新

时间:2016-12-01 19:53:01

标签: doctrine-orm symfony

我有以下课程:

class Pedido
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="fin", type="datetime", nullable=true)
     */
    private $fin;

    /** 
     * @ORM\OneToMany(targetEntity="Estado", mappedBy="pedido", cascade={"persist","remove"})
     */
    protected $estados;

    public function addEstado(\AppBundle\Entity\Estado $estado)
    {
        $estado->setPedido($this);
        $this->estados[] = $estado;
        $this->estado = $estado->getEstado();

        return $this;
    }
}



class Estado
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="estado", type="string", length=255)
     */
    private $estado;

    /** 
     * @ORM\ManyToOne(targetEntity="Pedido", inversedBy="estados")
     */
    protected $pedido;

}

但是当我打电话时:

$pedido = $em->getRepository('AppBundle:Pedido')->find(18);
$estado = new Estado;
$estado->setEstado('New Estado');
$pedido->addEstado($estado);

$em->flush();

新的Estado实体保持正确,但是Pedido仍然使用estado" Old Estado"。

我已经倾销了$ pedido pre和post flush以及getEstado返回" New Estado",但在数据库中仍然是" Old Estado"。

奇怪的是,如果我打电话:

    $pedidos = $em->getRepository('AppBundle:Pedido')->findAll();
    foreach($pedidos as $pedido)
    {
        $estado = new Estado;
        $estado->setEstado('New Estado');
        $pedido->addEstado($estado);
    }
    $em->flush();

第一个$ pedido仍然与estado" Old Estado",但所有其他成功地改为" New Estado"。

有什么想法吗?

更新

我有一个PostPersist方法,在estado =" Caducado"调用:

$pedido->setFin(new \DateTime);

是什么让第一个$ pedido estado属性保持不变,但无法找到原因

1 个答案:

答案 0 :(得分:0)

更改:

$pedido->setFin(new \DateTime);

从PostPersist到PrePersist并解决了问题,如果有人知道背后的解释,请在下面添加。