Quelqu'un pourrait-il me dire comment ajouter une valeur par défaut à la colonne datetime? Je ne peux pas faire ça comme ça:
protected $registration_date = date("Y-m-d H:i:s", time());
Alors comment?
Vous mappez votre propriété en tant que type DateTime, puis définissez la valeur dans le constructeur à l'aide d'une nouvelle instance DateTime:
/**
* @Entity
* @Table(name="...")
*/
class MyEntity
{
/** @Column(type="datetime") */
protected $registration_date;
public function __construct()
{
$this->registration_date = new DateTime();
}
}
Cela fonctionne comme le constructeur d'une classe persistante n'est pas appelé à l'hydratation.
Vous pouvez également utiliser des rappels de cycle de vie si vous voulez être très précis:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\HasLifecycleCallbacks
* ...
*/
class MyEntity
{
/**
* @ORM\PrePersist
*/
public function onPrePersistSetRegistrationDate()
{
$this->registration_date = new \DateTime();
}
}
Pour la valeur par défaut CURRENT_TIMESTAMP:
@ORM\Column(name="created_at", type="datetime", options={"default": "CURRENT_TIMESTAMP"})
Ou pour les anciennes versions de Symfony:
@ORM\Column(name="created_at", type="datetime", options={"default": 0})
Travaillé pour moi ... Cependant, ceci ne fonctionne qu'avec MySQL .
Il existe une extension pour cette automatisation de cette ...
https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/timestampable.md
/**
* @var \DateTime
*
* @ORM\Column(name="date_added", type="datetime")
* @Gedmo\Timestampable(on="create")
*/
private $date_added;
/**
* @var \DateTime
*
* @ORM\Column(name="date_modified", type="datetime")
* @Gedmo\Timestampable(on="update")
*/
private $date_modified;
Je pense que la meilleure façon de réaliser la saisie automatique pour datetime
est de faire comme ça:
* @ORM\Column(type="datetime", options={"default"="CURRENT_TIMESTAMP"})
Mettre la logique dans constructeur n'est pas une bonne solution, car la définition des valeurs par défaut est responsabilité du client SQL . Si vous décidez de ne plus utiliser ORM, vous perdrez votre logique métier. De plus, si vous utilisez un constructeur, vous ne pourrez pas ajouter d’horodatage par défaut aux attributs datetime
pour lignes existantes .
@var string @ORM\Column(name="login_at", type="datetime", options={"default" = "CURRENT_TIMESTAMP"})
Cela fonctionnera. Je poste juste pour la future réf.
Travaillez pour moi avec MySql et Symfony 3.4.
...
fields:
start_date:
type: date
nullable: false
options:
default: '1910-01-01'
comment: 'The default date is 1910-01-01'
...