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