doctrineエンティティに「誕生日」という名前のフィールドがあります。
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;
}
$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
// ...
"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'));