2012-02-06 9 views
5

Oto moja definicja tabeli dla schematu Propel. Kolumna modified ma typ timestamp (DateTime w PHP) i chciałbym przypisać domyślną wartość do teraz. Próbowałem ustawienie go na „teraz”, ale dostaję błąd używając propel-gen insert-sql polecenie:Jak określić defaultValue na "teraz" dla kolumny timestamp w Propelu?

„Syntaxt błąd lub naruszenie zasad dostępu. 1067 Nieprawidłowa wartość domyślną «zmodyfikowane»

ktoś wie jak mogę ustawić domyślną wartość do tej pory dla kolumny timestamp w Propelu?

<table name="mashup_setting"> 
    <!-- omitted previous column definition --> 
    <column name="modified" type="timestamp" required="true" defaultValue="now" /> 
</table> 

Odpowiedz

5

zmienić nazwę na „updated_at”, który jest specjalnym polu w Propelu że zostanie automatycznie zaktualizowana nOW() w dowolnym momencie zaktualizowaćpole. "created_at" jest również podobne i zrobi to samo, gdy twój obiekt zostanie utworzony.

W swoim modelu zawsze możesz ustawić proxy "modified" lub getModified() na getUpdatedAt(), aby zakończyć działanie.

Jeśli musisz "zmodyfikować" jako nazwę kolumny, musisz napisać zachowanie, które moim zdaniem jest bardziej pracochłonne, aby tego dokonać. Tutaj znajdziesz informacje o zachowaniach.

http://www.symfony-project.org/cookbook/1_2/en/behaviors

11

W nowszych wersjach napędzać można określić ci kolumny tak:

<column name="created" type="TIMESTAMP" defaultExpr="CURRENT_TIMESTAMP" /> 

To wtedy cross-db kompatybilne.

+0

To powinna być zaakceptowana odpowiedź, ponieważ jest dokładniejsza! – tmuecksch

+0

Uzgodnione, to jest bardziej dokładne i powinno być zaakceptowaną odpowiedzią. –

2

Docs w http://propelorm.org/behaviors/timestampable.html nie precyzują, czy to jest dostępne w 1.6, ale dodać do tego schematu i budować:

<behavior name="timestampable" /> 

Model ma teraz dwie nowe kolumny, created_at i updated_at, które przechowują znacznik czasu automatycznie zaktualizowano: zapisz:

$obj->save(); 
echo $obj->getCreatedAt(); // 2009-10-02 18:14:23 
echo $obj->getUpdatedAt(); // 2009-10-02 18:14:25 
+1

Dobra odpowiedź, dzięki! –

Powiązane problemy