使用Doctrine2在数据库中保留日期

时间:2012-08-03 06:53:49

标签: php symfony doctrine-orm

我正在使用Symfony2和Doctrine2,我有一个名为Domains的类,其属性有一些名称 - 字符串和一些日期。我使用以下代码将信息保存到数据库:

public function createAction()
{
    $date = new \DateTime();
    $domain = new Domains();
    $domain->setMainDomain('new domain');
    $domain->setUser('new user');
    $domain->setSrv('server1');
    $domain->setStartDate($date->setDate(1992, 6, 3));
    $domain->setDueDate($date->setDate(1998, 7, 21));
    $domain->setPrevStartDate($date->setDate(1800, 9, 15));
    $domain->setPrevDueDate($date->setDate(1850, 10, 25));
    $domain->setNotified($date->setDate(2222, 3, 21), $date->setTime(12,01));

    $em = $this->getDoctrine()->getEntityManager();
    $em->persist($domain);
    $em->flush();

    return new Response('Added a new domain with number '.$domain->getId());
} 

问题是所有日期都具有列表中最后一个的值:(在示例中,所有日期都变为2222-03-21。如果不创建新的DateTime对象,请帮助我解决此问题对于我想在日期库中保留的每个日期?提前非常感谢!

1 个答案:

答案 0 :(得分:4)

这不是Symfony2 / Doctrine2问题。

在PHP中,所有对象都通过引用传递,因此您实际上是在传递$date的同一个实例,所以显然它会将所有日期设置为最后一个。

没有办法按照你想要的方式(仅使用1个DateTime实例),但我真的看不出你为什么要这么做。

详细说明,你为什么这么想:

$domain->setStartDate($date->setDate(1992, 6, 3));
$domain->setDueDate($date->setDate(1998, 7, 21));
$domain->setPrevStartDate($date->setDate(1800, 9, 15));
...

比这更好:

$domain->setStartDate(new \DateTime('1992-6-3'));
$domain->setDueDate(new \DateTime('1998-7-21'));
$domain->setPrevStartDate(new \DateTime('1800-9-15'));
...