我想我发现了一个我找不到解决方案的错误。
我尝试更新日期时间字段,但不要更新它,不要给我一个错误。
移动所有其他字段正确修改它们,但日期时间字段编号
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('MyOwnBundle:Events')->find($id);
$In = $entity->getDateIn();
$In->modify('+1 day');
$entity->setDateIn($In);
$em->flush();
我还尝试直接插入DateTime()对象,但根本不更新!
$entity->setDateIn(new \DateTime());
这个问题有解决方法吗?
我安装了symfony 2.1和doctrine 2.3.3
修改 事件实体:
/**
* Events
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="My\OwnBundle\Entity\EventsRepository")
*/
class Events
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=100)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="description", type="text")
*/
private $description;
/**
* @var \DateTime
*
* @ORM\Column(name="dateIn", type="datetime")
*/
private $dateIn;
/**
* @var \DateTime
*
* @ORM\Column(name="dateOut", type="datetime")
*/
private $dateOut;
....
/**
* Set dateIn
*
* @param \DateTime $dateIn
* @return Events
*/
public function setDateIn($dateIn)
{
$this->dateIn = $dateIn;
return $this;
}
/**
* Get dateIn
*
* @return \DateTime
*/
public function getDateIn()
{
return $this->dateIn;
}
/**
* Set dateOut
*
* @param \DateTime $dateOut
* @return Events
*/
public function setDateOut($dateOut)
{
$this->dateOut = $dateOut;
return $this;
}
/**
* Get dateOut
*
* @return \DateTime
*/
public function getDateOut()
{
return $this->dateOut;
}
....
答案 0 :(得分:5)
由于Doctrine通过引用跟踪DateTime对象,因此modify()方法不会更新实体。您需要克隆现有的DateTime对象,为其提供新的引用。修改新的,然后设置为新的时间戳。
有关详细信息,请参阅Doctrine Documentation中的文章。
答案 1 :(得分:-1)
实体是正确的,但您需要使用$ em-> persist($ entity)来保留您的实体,并且您不需要再次设置日期,因为日期时间是通过引用传递的
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('MyOwnBundle:Events')->find($id);
$entity->getDateIn()->modify('+1 day');
$em->persist($entity);
$em->flush();