我正在使用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对象,请帮助我解决此问题对于我想在日期库中保留的每个日期?提前非常感谢!
答案 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'));
...