27

教義エンティティに「誕生日」という名前のフィールドがあります。

doctrine を使用してデータベースに追加するオブジェクトを作成したいと思います。

コントローラーの内部:

$name = "John Alex";
$birthday = "11-11-90";
$student = new Student();
$student->setName($name);
$student->setBirthday(strtotime($birthday);
...

しかし、永続化しようとすると、このエラーが発生します

Fatal error: Call to a member function format() on a non-object in /Library/WebServer/Documents/Symfony/vendor/doctrine-dbal/lib/Doctrine/DBAL/Types/DateType.php on line 44

編集:

私のエンティティ:

/**
 * @var string $name
 *
 * @ORM\Column(name="name", type="string", length=255)
 */
private $name;

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

/**
 * Set birthday
 *
 * @param date $birthday
 */
public function setBirthday($birthday)
{
    $this->birthday = $birthday;
}

/**
 * Get birthday
 *
 * @return date 
 */
public function getBirthday()
{
    return $this->birthday;
}
4

2 に答える 2

42
$name = "John Alex";
$birthday = "11-11-1990"; // I changed this
$student = new Student();
$student->setName($name);
$student->setBirthday(new \DateTime($birthday)); // setting a new date instance
// ...
于 2012-05-31T16:16:30.493 に答える
30

としてマップされたエンティティのフィールド"datetime"または"date"のインスタンスを含む必要がありますDateTime

したがって、セッターは次のようにタイプヒントする必要があります。

/**
 * Set birthday
 *
 * @param \DateTime|null $birthday
 */
public function setBirthday(\DateTime $birthday = null)
{
    $this->birthday = $birthday ? clone $birthday : null;
}

/**
 * Get birthday
 *
 * @return \DateTime|null 
 */
public function getBirthday()
{
    return $this->birthday ? clone $this->birthday : null;
}

これにより、誕生日nullに または のインスタンスを設定できます。DateTime

cloneお気づきのように、カプセル化を壊さないように誕生日の値も追加しました ( Doctrine2 ORM は変更を DateTime フィールドに保存しない を参照してください)。

誕生日を設定するには、次のようにします。

$student->setBirthday(new \DateTime('11-11-90'));
于 2013-03-20T09:07:13.307 に答える