【问题标题】:Symfony + Doctrine 2.2 DateTime column errorSymfony + Doctrine 2.2 DateTime 列错误
【发布时间】:2012-01-30 23:04:02
【问题描述】:

我很难解决这个问题。我在尝试持久化实体时遇到以下错误(请参阅下面的源代码):

Fatal error: Call to a member function format() on a non-object 
in *****\vendor\doctrine-dbal\lib\Doctrine\DBAL\Types\DateTimeTzType.php 
on line 64

这是实体代码的 sn-p:

namespace ****\Bundle\****Bundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;

use Doctrine\ORM\Mapping as ORM;

use Symfony\Component\Validator\Constraints as Assert;

/**
 * ****\Bundle\****Bundle\Entity\MyEntity
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="****\Bundle\****Bundle\Entity\****Repository")
 * @ORM\HasLifecycleCallbacks()
 */
class MyEntity
{

/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var \DateTime $created_at
 * 
 * @ORM\Column(name="created_at", type="datetime")
 */
private $created_at;

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

/**
 * Set created_at
 *
 * @param datetime $createdAt
 */
public function setCreatedAt($createdAt)
{
    $this->created_at = $createdAt;
}

/**
 * Get created_at
 *
 * @return datetime 
 */
public function getCreatedAt()
{
    return $this->created_at;
}

/**
 * Set updated_at
 *
 * @param datetime $updatedAt
 */
public function setUpdatedAt($updatedAt)
{
    $this->updated_at = $updatedAt;
}

/**
 * Get updated_at
 *
 * @return datetime 
 */
public function getUpdatedAt()
{
    return $this->updated_at;
}

/**
 * @ORM\PrePersist()
 */
public function executePrePersist()
{
    $this->created_at = new \DateTime();
}

/**
 * @ORM\PreUpdate()
 */
public function executePreUpdate()
{
    $this->updated_at = new  \DateTime();
}
}

在这里发帖之前,我已经添加了:

print_r(get_class($value))

到有问题的地方的 DateTimeTzType.php 知道它收到了哪种数据,我得到了以下错误:

Warning: get_class() expects parameter 1 to be object, string given 

所以它似乎接收的是字符串而不是 DateTime 对象,然后因为字符串没有 format() 方法而失败。

我正在使用 Symfony 2.0.9。我错过了什么吗?

【问题讨论】:

    标签: php datetime symfony1 doctrine


    【解决方案1】:

    似乎您的 setCreatedAt() 和 getCreatedAt() 没有指定它们需要 DateTime 作为类型,这是 Doctrine 所期望的。

    您可以确保在调用这些函数时创建一个 DateTime 对象,或者修改方法以检查是否提供了字符串作为输入,并在需要时创建该对象。通常只需将日期的字符串表示形式作为第一个参数发送给 DateTime 构造函数即可。

    【讨论】:

      【解决方案2】:

      这是我的错误。我在实体的其他地方有另一个 DateTime 类型的字段,我在坚持之前将一个字符串传递给它。我确信这是 createdAt 字段。感谢 xdebug 并为这篇文章感到抱歉。

      【讨论】:

        猜你喜欢
        • 2017-07-27
        • 1970-01-01
        • 2012-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        相关资源
        最近更新 更多