1

我正在使用 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 对象吗我想在数据库中坚持哪个?非常感谢您!

4

1 回答 1

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'));
...
于 2012-08-03T07:11:19.677 回答