Comment fixer une date dans la Doctrine 2?

j'ai un champ nommé" birthday " dans entité doctrine.

je voudrais créer un objet à ajouter à la base de données en utilisant la doctrine.

à l'intérieur du contrôleur:

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

mais quand j'essaie de persister j'obtiens cette erreur

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:

mon entité:

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

/**
 * @var date $birthday
 *
 * @ORMColumn(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;
}
26
demandé sur Mick 2012-05-31 18:59:09

2 réponses

$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
// ...
38
répondu Mohamed 2013-03-24 17:00:25
Les champs

de vos entités cartographiées comme "datetime" ou "date" devraient contenir des cas de DateTime .

par conséquent, votre setter doit être suggéré comme suit:

/**
 * 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;
}

cela permet de définir soit null ou une instance de DateTime pour l'anniversaire.

comme vous le remarquez, j'ai aussi clone les valeurs pour la date d'anniversaire pour éviter de briser l'encapsulation (voir Doctrine2 L'ORM ne sauvegarde pas les changements dans un champ DateTime ).

pour fixer l'anniversaire, vous faites alors simplement la suite:

$student->setBirthday(new \DateTime('11-11-90'));
27
répondu Ocramius 2017-05-23 10:31:10