Bonjour,

Je n'arrive pas ajouter le champ date dans mon entity. Merci d'avance

Ce que je fais

J'aimerais pouvoir insérer une date automatiquement à chaque insertion de l'entité Souscripteur.php. du coup j'ai rajouté ceci

/**
     * @ORM\Column(type="datetime")
     * @Assert\DateTime
     */
    private $publishedAt;

    public function __construct()
    {
        $this->publishedAt = new \DateTime('now');
    }

Ce que je veux

J'aimerais que dans ma base le champ publishedAt se crée automatiquement avec la date d'insertion des données

Ce que j'obtiens

Mais quand je veux faire la migration pour mettre à jour les champs de la BDD, j'obtiens cette erreur :

In PDOConnection.php line 125:

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '0000-00-00 00:00:00' for column 'p
ublished_at' at row 1

3 réponses


C'est un problème de format de date. Ta BDD attend un format de type AAAA-MM-JJ HH:MM:SS et celle que tu lui envoies n'est pas dans ce format.

Ok stp mais comment mettre le bon format pour la base de données ?
J'ai ressayé ceci mais j'ai encore l'erreur d'invalidité :

/**

  • @ORM\Column(type="datetime")
  • @Assert\DateTime(format="YYYY-MM-DD hh:mm:ss")
    */
    private $publishedAt;

    public function __construct()
    {
    $this->publishedAt = new \DateTime('now');
    }

Je n'ai pas travailler avec l'objet DateTime, mais avec la fonction date. Attention toutefois au fuseau horaire.

Voici ce que j'ai fait pour la colonne last_login

function logmein(array $user): array{
    if (session_status()===PHP_SESSION_NONE):
        session_start();
    endif;
    require 'pdo.php';
    $u_log = $user[0];
    $u_pass = $user[1];

    $req = $bdd->prepare("SELECT log_in, u_password, id_role, last_login  FROM users WHERE log_in = :log_in AND u_password = :u_password");
    $req->execute(array(
        'log_in' => $u_log,
        'u_password' => $u_pass,
    ));
    $finduser= $req->fetch();

    if(!empty ($finduser)){
        $_SESSION['user_role']=$finduser[2];
        $_SESSION['user_last_log']=$finduser[3];
        $_SESSION['user_connected']=true;
        date_default_timezone_set('Europe/Paris');
        $date = date("Y-m-d H:i:s");
        $req_update = $bdd->prepare('UPDATE users SET last_login = :last_login WHERE log_in = "'.$u_log.'"');
        $req_update->bindParam(':last_login', $date, PDO::PARAM_STR);
        $req_update->execute();
        return [true, $finduser[2], $finduser[3]];
    }else{
        return [false, $finduser[2], $finduser[3]];
    };
    $finduser->closeCursor();
};

Et ça marche parfaitement.
En espérant que ça t'aidera