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


Persist dates in the database with Doctrine2

我正在使用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对象?提前非常感谢!

这不是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'));
...