Doctrine2不更新DateTime

时间:2013-04-14 21:15:37

标签: symfony doctrine-orm symfony-2.1

我想我发现了一个我找不到解决方案的错误。

我尝试更新日期时间字段,但不要更新它,不要给我一个错误。

移动所有其他字段正确修改它们,但日期时间字段编号

$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('MyOwnBundle:Events')->find($id);
$In = $entity->getDateIn();
$In->modify('+1 day');
$entity->setDateIn($In);
$em->flush();

我还尝试直接插入DateTime()对象,但根本不更新!

$entity->setDateIn(new \DateTime());

这个问题有解决方法吗?

我安装了symfony 2.1和doctrine 2.3.3

修改 事件实体:

/**
 * Events
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="My\OwnBundle\Entity\EventsRepository")
 */
 class Events
 {
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

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

/**
 * @var string
 *
 * @ORM\Column(name="description", type="text")
 */
private $description;

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

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

....

/**
 * Set dateIn
 *
 * @param \DateTime $dateIn
 * @return Events
 */
public function setDateIn($dateIn)
{
    $this->dateIn = $dateIn;

    return $this;
}

/**
 * Get dateIn
 *
 * @return \DateTime 
 */
public function getDateIn()
{
    return $this->dateIn;
}

/**
 * Set dateOut
 *
 * @param \DateTime $dateOut
 * @return Events
 */
public function setDateOut($dateOut)
{
    $this->dateOut = $dateOut;

    return $this;
}

/**
 * Get dateOut
 *
 * @return \DateTime 
 */
public function getDateOut()
{
    return $this->dateOut;
}

....

2 个答案:

答案 0 :(得分:5)

由于Doctrine通过引用跟踪DateTime对象,因此modify()方法不会更新实体。您需要克隆现有的DateTime对象,为其提供新的引用。修改新的,然后设置为新的时间戳。

有关详细信息,请参阅Doctrine Documentation中的文章。

答案 1 :(得分:-1)

实体是正确的,但您需要使用$ em-> persist($ entity)来保留您的实体,并且您不需要再次设置日期,因为日期时间是通过引用传递的

$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('MyOwnBundle:Events')->find($id);
$entity->getDateIn()->modify('+1 day');
$em->persist($entity);
$em->flush();