2

我想我发现了一个我找不到解决方案的错误..

我尝试更新 datetime 字段,但不要更新它,不要给我一个错误。

移动所有其他字段正确修改它们,但日期时间字段没有。

$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 和教义 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;
}

....
4

2 回答 2

6

modify() 方法不会更新实体,因为 Doctrine 通过引用跟踪 DateTime 对象。你需要克隆你现有的 DateTime 对象,给它一个新的引用。修改新的,然后设置为新的时间戳。

有关更多信息,请参阅Doctrine 文档中的文章。

于 2015-01-25T20:10:50.793 回答
-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();
于 2013-04-15T14:32:25.187 回答