我有以下课程:
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属性保持不变,但无法找到原因
答案 0 :(得分:0)
更改:
$pedido->setFin(new \DateTime);
从PostPersist到PrePersist并解决了问题,如果有人知道背后的解释,请在下面添加。