Se tivéssemos um campo do tipo date time como geraríamos a data automática para ele? De forma que o nosso banco entendesse.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Se tivéssemos um campo do tipo date time como geraríamos a data automática para ele? De forma que o nosso banco entendesse.
Achei a solução. Passando para o nosso construtor o \DateTime("now") o framework faz essa associação e insere o datetime bonitinho pra gente. Só que para a hora ficar certinha temos que recorer a outro recurso do datetime;
Vou deixar um link de referência: https://www.doctrine-project.org/projects/doctrine-orm/en/2.13/cookbook/working-with-datetime.html
<?php
declare(strict_types=1);
namespace Src\Entity;
//use Doctrine\Common\Collections\ArrayCollection;
//use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\GeneratedValue;
use Doctrine\ORM\Mapping\Id;
//use Doctrine\ORM\Mapping\ManyToMany;
//use Doctrine\ORM\Mapping\OneToMany;
#[Entity(repositoryClass: DoctrineUsersRepository::class)]
#[Table('users')]
class Users
{
#[Id]
#[Column, GeneratedValue]
private int $id;
#[Column(name: 'created_at')]
private \DateTime $createdAt;
public function __construct
(
#[Column(length: 100)]
public readonly string $name,
#[Column(length: 100)]
public readonly string $email,
#[Column(length: 15)]
public readonly string $cpf,
#[Column]
public readonly string $password
) {
$this->CreatedAt();
}
/**
* Set the value of createdAt
*/
public function CreatedAt()
{
$this->createdAt = new \DateTime("now");
return $this->createdAt;
}
}
Atenção a ordem do código determina a ordem da tabela. Definindo CreateAt após o construct, nosso banco de dados colocará a data no como última coluna.
<?php
declare(strict_types=1);
namespace Src\Entity;
//use Doctrine\Common\Collections\ArrayCollection;
//use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\GeneratedValue;
use Doctrine\ORM\Mapping\Id;
//use Doctrine\ORM\Mapping\ManyToMany;
//use Doctrine\ORM\Mapping\OneToMany;
#[Entity(repositoryClass: DoctrineUsersRepository::class)]
#[Table('users')]
class Users
{
#[Id]
#[Column, GeneratedValue]
private int $id;
public function __construct
(
#[Column(length: 100)]
public readonly string $name,
#[Column(length: 100)]
public readonly string $email,
#[Column(length: 15)]
public readonly string $cpf,
#[Column]
public readonly string $password
) {
$this->CreatedAt();
}
#[Column(name: 'created_at')]
private \DateTime $createdAt;
/**
* Set the value of createdAt
*/
public function CreatedAt()
{
$this->createdAt = new \DateTime("now");
return $this->createdAt;
}
}
Olá, Philipe. Tudo bem?
Gostaria de pedir desculpas pela demora em responder o seu tópico.
Que bom que você conseguiu achar a solução para a sua problemática, e foi uma solução bem plausível. Parabéns!
Só deixar um comentário, você também poderia passar o formato dessa data, da seguinte maneira:
$data = new \DateTime("now");
var_dump($data->format("Y-m-d H:i:s"));Isso pode ser útil, em algumas situações!
Bons estudos :)