'Inserting the current date doctrine
I have created a symfony project and am having a date issue. I would like to make a request which inserts the current date in the database. In my entity my fields are date time.
Here is the repository, the controller and the error obtained.
Repository :
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $date_maj;
Controller :
$qb = $this->getDoctrine()
->getManager()
->createQueryBuilder()
->update(Tache::class, 't')
->set('t.date_maj', date(('Y-m-d H:i:s'), time()))
->where('t.id = :id')
->setParameter('id', $id)
->getQuery()
->execute();
Error :
[Syntax Error] line 0, col 87: Error: Expected end of string, got '06'
Solution 1:[1]
You want to set a parameter with a PHP \DateTime
as the value, similar to :id
in the where clause. The query builder will handle the conversion to the database string value:
$now = new \DateTime();
$qb = $this->getDoctrine()
->getManager()
->createQueryBuilder()
->update(Tache::class, 't')
->set('t.date_maj', ':now')
->where('t.id = :id')
->setParameter('now', $now)
->setParameter('id', $id)
->getQuery()
->execute();
Solution 2:[2]
You should use your entity with persist and flush instead using queryBuilder. Your entity looks like thhis :
/**
* @ORM\Column(type="datetime", nullable=true)
* @var DateTime|null
*/
private $date_maj;
public function getDateMaj(): ?DateTime
{
return $this->date_maj;
}
public function setDateMaj(?DateTime $dateMaj): self
{
$this->date_maj = $dateMaj;
}
And controller-side :
// it's for example, using injection dependency is better
$em = $this->getDoctrine()->getManager();
// Get your entity (if it's from Form, this line is useless, retrieve entity from $form->getData())
$tache = $em->getRepository(Tache::class)->find($id);
$now = new \DateTime();
$tache->setDateMaj($now);
$em->persist($tache);
$em->flush();
If it's ok, you can edit typo DateTime
to DateTimeInterface
too
Solution 3:[3]
You can put it in your construct using new \DateTime()
public function __construct()
{
$this->date_maj=new \DateTime();
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Arleigh Hix |
Solution 2 | Hamham |
Solution 3 | L3xpert |