我正在使用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'));
...