2016-12-01 29 views
0

我有以下類別:Symfony3實體屬性不被通過一對多關聯方法更新

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(); 

新埃斯塔實體正確地堅持着,但Pedido仍然有estado「舊的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仍然有埃斯塔「老埃斯塔」,但所有的人成功地得到改變,以「新國家體制」。

任何想法?

UPDATE:

我有上埃斯塔= 「Caducado」 調用PostPersist方法:

$pedido->setFin(new \DateTime); 

這就是使得第一$ pedido埃斯塔屬性保持不變,但可以」找不到爲什麼

回答

0

改變的原因:

$pedido->setFin(new \DateTime); 

從PostPersist到PrePersist並解決問題,如果有人知道背後的解釋,請在下面添加它。

相關問題