Symfony 2 + Doctrine 2 - DateTime字段不存在

时间:2014-08-07 18:36:47

标签: php symfony datetime doctrine-orm

我有一个Blah类型的实体,其中包含以下字段:

/**
 * @var datetime $begin
 *
 * @ORM\Column(name="begin", type="datetime", nullable=true)
 */
private $begin;

/**
 * @var datetime $end
 *
 * @ORM\Column(name="end", type="datetime", nullable=true)
 */
private $end;

使用以下getter / setter:

/**
 * @param $begin
 */
public function setBegin($begin)
{
    $this->begin = $begin;
}

/**
 * @return \DateTime
 */
public function getBegin()
{
    return $this->begin;
}

/**
 * @param $end
 */
public function setEnd($end)
{
    if ($end < $this->begin) {
        $this->end = $this->begin->add(\DateInterval::createFromDateString('1 day'));
    } else {
        $this->end = $end;
    }
}

/**
 * @return \DateTime
 */
public function getEnd()
{
    return $this->end;
}

以及具有以下内容的相应表单类型:

    $builder->add('begin', 'datetime', array(
            'label' => 'Begin',
            'required' => false,
    ));

    $builder->add('end', 'datetime', array(
            'label' => 'End',
            'required' => false,
    ));

该方法的表单处理部分:

    $form = $this->createForm(new BlahType(), $blah);

    if ($request->getMethod() == 'POST') {
        $postData = $request->request->all();

        if (!empty($postData['save'])) {
            $form->handleRequest($request);

            $numThings = $postData['blah']['numThings'];

            if ($numThings) {
                for ($i = 0; $i < $numThings; ++$i) {
                    $thing = new Thing();

                    $blah->addThing($thing);
                }
            }

            $em->persist($blah);
            $em->flush();
        }
    }

当我尝试保存这些条目时,null会被传递回实体,尽管填充的实体包含每个条目的两个数组

传回实体的屏幕截图:

enter image description here

$form->handleRequest()之后填充的实体应该具有的屏幕截图:

enter image description here

毋庸置疑,我很困惑。根据{{​​3}},datetime字段应默认为inputdatetime,但我将数据作为一系列每个字段有两个数组 - 一个包含日,月和年的数组,另一个包含小时和分钟。即使这样,null也被传递回实体并保存在数据库中。

令人费解。有什么建议/答案吗?

编辑:表单本身在null

中有viewData

enter image description here

1 个答案:

答案 0 :(得分:0)

想出来。问题是由于PHP莫名其妙地只识别大陆/城市时区而不是旧的国家/时区时区。美国/东方不再有效。