2

解決策が見つからないバグを見つけたと思います..

日時フィールドを更新しようとしましたが、更新しません。エラーは発生しません。

他のすべてのフィールドを移動すると正しく変更されますが、日時フィールドは変更されません。

$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 をインストールしました

EDIT イベント エンティティ:

/**
 * 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

Doctrine は参照によって DateTime オブジェクトを追跡するため、modify() メソッドはエンティティを更新しません。既存の DateTime オブジェクトを複製して、新しい参照を与える必要があります。新しいものを変更してから、新しいタイムスタンプとして設定します。

詳細については、Doctrine Documentationの記事を参照してください。

于 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 に答える