Symfony + Doctrine 2.2 Ошибка столбца DateTime - PullRequest
2 голосов
/ 31 января 2012

Мне трудно разобраться в этом вопросе. Я получаю следующую ошибку при попытке сохранить сущность (см. Источник ниже):

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

Вот фрагмент кода сущности:

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. Я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2012

Это была моя ошибка. У меня было другое поле с типом DateTime в другом месте в моем праве, и я передавал ему строку перед сохранением. Я был убежден, что это было создано на поле. Спасибо xdebug и извините за пост.

0 голосов
/ 31 января 2012

Похоже, что ваши setCreatedAt () и getCreatedAt () не указывают, что они требуют DateTime в качестве типа, которого ожидает Doctrine.

Вы можете убедиться, что вы создали объект DateTime при вызове этих функций или изменилиметоды для проверки, была ли предоставлена ​​строка в качестве входных данных, и создание объекта при необходимости.Обычно просто отправка строкового представления даты в качестве первого аргумента в конструктор DateTime.

...