Reputation: 1838
I have a field named "birthday" in doctrine entity.
I would like to create an object to add to database using doctrine.
Inside the controller :
$name = "John Alex";
$birthday = "11-11-90";
$student = new Student();
$student->setName($name);
$student->setBirthday(strtotime($birthday);
...
but when I try to persist I get this error
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
Edit:
My entity:
/**
* @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;
}
Upvotes: 27
Views: 66978
Reputation: 1838
$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
// ...
Upvotes: 41
Reputation: 25431
Fields of your entities mapped as "datetime"
or "date"
should contain instances of DateTime
.
Therefore, your setter should be type-hinted as following:
/**
* 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;
}
This allows setting either null
or an instance of DateTime
for the birthday.
As you notice, I also clone
the values for the birthday date to avoid breaking encapsulation (see Doctrine2 ORM does not save changes to a DateTime field ).
To set the birthday, you then simply do following:
$student->setBirthday(new \DateTime('11-11-90'));
Upvotes: 30