Czy ktoś mógłby mi powiedzieć, jak dodać wartość domyślną do kolumny datetime? Nie mogę tego zrobić tak:Doctrine 2.1 - domyślna wartość kolumny datetime
protected $registration_date = date("Y-m-d H:i:s", time());
A jak?
Czy ktoś mógłby mi powiedzieć, jak dodać wartość domyślną do kolumny datetime? Nie mogę tego zrobić tak:Doctrine 2.1 - domyślna wartość kolumny datetime
protected $registration_date = date("Y-m-d H:i:s", time());
A jak?
mapować nieruchomość jako typ DateTime następnie ustawić wartość w konstruktorze przy użyciu nowej instancji DateTime:
/**
* @Entity
* @Table(name="...")
*/
class MyEntity
{
/** @Column(type="datetime") */
protected $registration_date;
public function __construct()
{
$this->registration_date = new DateTime();
}
}
to działa jako konstruktora utrwalonej klasy nie nazywa się po uwodnieniu.
Można również użyć zwrotnych cyklu życia, jeśli chcesz być bardzo precyzyjne:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\HasLifecycleCallbacks
* ...
*/
class MyEntity
{
/**
* @ORM\PrePersist
*/
public function onPrePersistSetRegistrationDate()
{
$this->registration_date = new \DateTime();
}
}
Preferuję tę odpowiedź, ponieważ znacznie wyraźniej wyjaśnia, w jaki sposób Doctrine sobie z tym poradzi. –
+1 Wprowadzi najnowszą datę do rekordu. Jeśli rekord ma dwie daty modified_datetime i created_datetime. Jeśli wstawisz modified_datetime do konstruktora, czas created_time może być nowszy niż modified_datetime. –
Aby uzyskać informacje na temat wszystkich możliwości wywoływania zwrotnego cyklu życia: http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#reference-events-lifecycle-events – fyrye
Jest to rozszerzenie dla tej automatyzacji tego ...
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;
za zwłokę wartość CURRENT_TIMESTAMP:
@ORM\Column(name="created_at", type="datetime", options={"default": 0})
pracował dla mnie ...
To powinna być teraz najwyższa odpowiedź, IMO, szczególnie jeśli chcesz, aby schemat tabeli sam przyjmował CURRENT_TIMESTAMP – skrilled
Dzięki. Bardzo mi to pomogło. Użyłem 'options = {" default ":" CURRENT_TIMESTAMP "})', przed którym ogólnie pracował również. Ale z moim postgres db za to został przekształcony na DEFAULT NOW(), który jest sposobem postgres. Ale wtedy doktryna: migrations: diff źle zinterpretuje teraz() jako odchylenie od CURRENT_TIMESTAMP i utworzy plik diff za każdym razem, gdy go uruchomię. Ale dzięki temu rozwiązaniu doktryna stwierdza, że wszystko jest zsynchronizowane. – luba
Świetna odpowiedź i IMO, najczystszy sposób na zrobienie tego. Jeśli jest to interesujące, zostało to przetłumaczone jako "ADD date_added TIMESTAMP (0) BEZ STREFY CZASOWEJ CURRENT_TIMESTAMP NOT NULL" dla mnie. – crmpicco
myślę, że najlepszym sposobem osiągnięcia autouzupełnianie datetime
to zrobić tak:
* @ORM\Column(type="datetime", options={"default"="CURRENT_TIMESTAMP"})
Wykorzystanie logiki konstruktora nie jest dobrym rozwiązaniem, ponieważ ustawienie domyślne wartości to Odpowiedzialność klienta SQL. Jeśli zdecydujesz, że nie będziesz już używać ORM - utracisz logikę biznesową. Dodatkowo, jeśli korzystasz z konstruktora, nie będziesz w stanie dodawać domyślnych znaczników czasu do datetime
atrybutów dla istniejących wierszy.
dziękuję: D najlepsza odpowiedź – julestruong
To nie działa w doktrynie 2.5. – magnetik
Jak wspomniano poniżej "domyślnie": 0 "działa lepiej w przypadku migracji doktryn. – luba
Głosuję za tą odpowiedzią, ponieważ jest to czyste rozwiązanie PHP. Inne odpowiedzi mogą: 1) potrzebować specjalnej wiedzy 'onPrePersistSetRegistrationDate' która dodaje' HasLifecycleCallbacks', 'PrePersist' adnotacje 2) Chcę ustawić domyślną wartość potrzebuję mi dodać 3. bibliotekę' @Gedmo \ Timestampable'? !! 3) CURRENT_TIMESTAMP czasami nie jest dobry. Np .: kiedy serwer skryptów w Chinach, ale serwer bazy danych w Ameryce. (przyczyny, to nie jest bardzo powszechne, ale są takie przypadki) – Yarco