2017-06-09 1 views
2

J'ai une erreur très étrange dans mon application Symfony et je ne sais pas comment y remédier. Je veux définir un DateTime dans une de mes entités avec un DateTime après avoir ajouté un DateInterval spécial. Voici mon code:date_add obtient Boolean au lieu de DateTime

$dateInterval = new \DateInterval('P1DT6H'); 
$snoozedTo = date_add($sickNote->getSickTo(), $dateInterval); 
$channelUser->setSnoozedTo($snoozedTo); 
$this->em->persist($channelUser); 

Dans mes UnitTests j'obtiens l'erreur suivante:

date_add() expects parameter 1 to be DateTime, boolean given 

donc je double vérifier si $sickNote->getSickTo() retourne vraiment un DateTime. A dump() rendements:

DateTime {#17791 
    +"date": "2018-01-01 06:00:00.000000" 
    +"timezone_type": 3 
    +"timezone": "UTC" 
} 

get_class() sur l'objet retourne DateTime.

Voici mon autre méthode getter pour le champ:

/** 
* Get sickTo 
* @return Date 
*/ 
public function getSickTo() { 
    return $this->sickTo; 
} 

Pourquoi date_add obtient un Boolean et non l'objet DateTime? J'ai également essayé la méthode d'objet DateTime::add(). Même résultat

Edit²: Voici ma déclaration de sickTo:

/** 
* @var datetime $sickTo 
* @ORM\Column(type="date", nullable=true) 
* @Assert\Date() 
*/ 
protected $sickTo; 
+1

Pouvez-vous montrer la déclaration de 'sickTo'? –

+0

J'ai édité ma question pour ceci. – mgluesenkamp

+1

si vous essayez '@var \ DateTime' et' type = "datetime" '? (ne pas oublier de mettre à jour votre db) –

Répondre

0

La déclaration de sickTo est faux. vous le déclarez comme une date mais vous utilisez un Datetime. Essayez de changer cela avec quelque chose comme ça:

/** 
* @var \DateTime $sickTo 
* @ORM\Column(type="datetime", nullable=true) 
* @Assert\DateTime() 
*/ 

protected $sickTo;