2016-12-01 1 views
0

Ich habe die folgenden Klassen:Symfony3 Entitätseigenschaft nicht durch OneToMany Zuordnungsverfahren aktualisiert

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; 

} 

Aber wenn ich rufe:

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

$em->flush(); 

Die neue Estado Einheit korrekt beibehalten wird, aber Pedido bleibt Estado "Alter Estado".

Ich habe $ pedido pre und post flush und getEstado gibt "New Estado" zurück, aber in der Datenbank bleibt als "Old Estado".

Seltsame ist, dass, wenn ich rufe:

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

Erste $ pedido mit Estado "Old Estado" bleibt, aber alle anderen erfolgreich zu "New Estado" umziehen.

Irgendwelche Ideen?

UPDATE:

ich eine PostPersist Methode, die auf estado = "caducado" nennt:

$pedido->setFin(new \DateTime); 

Das ist, was macht die ersten $ pedido estado Eigenschaft gleich zu bleiben, kann aber‘ t finden den Grund, warum

Antwort

0

geändert:

$pedido->setFin(new \DateTime); 

Von PostPersist zu PrePersist und Problem gelöst, wenn jemand die Erklärung dahinter kennt, bitte fügen Sie es unten hinzu.

Verwandte Themen