2012-04-26 8 views
5

Mam dwa małe pytania:symfony: Actas: {Timestampable: ~}

actAs: { Timestampable: ~ } 

Co do "~", co oznacza w powyższym kodzie?

Następnie widziałem, że tabele z actAs: { Timestampable: ~ } mają dwa pola (created_at i updated_at).

Czy można powiązać pole updated_at z konkretnym polem (aktualizuję to pole, a następnie updated_at otrzymuję nową wartość)?

+0

'updated_at' jest zwykle używany do wskazania, że ​​* dowolne * pole rekordu zostało zmienione. Rozważ utworzenie osobnego pola dla celów, które opisałeś. –

Odpowiedz

14

"~" oznacza, że ​​będziesz używać wartości domyślnych lub konfiguracji domyślnej. W twoim przypadku zachowanie Timestampable, użyje domyślnej wartości i konfiguracji. Więc nie musisz ich na nowo definiować.

Od doc, oto niektóre konfiguracja:

Timestampable: 
    created: 
    name: created_at 
    type: timestamp 
    format: Y-m-d H:i:s 
    updated: 
    disabled: true 

Znajdziesz tu również tego "~" (dużo) w domyślnej generator.yml. W ten sposób, generator, nawet pusty, generuje piękny admin:

config: 
    actions: ~ 
    fields: ~ 
    list: ~ 
    filter: ~ 
    form: ~ 
    edit: ~ 
    new:  ~ 

Dla swoim pytaniu drugim celem Timestampable jest dla każdej modyfikacji w wierszu pole updated_at zostanie ustawiony z aktualną datą . Więc nie musisz się tym zajmować.

Edit:

A jeśli chcesz ręcznie zaktualizować pole updated_at:

  • pierwszy: trzeba będzie wyłączyć timestampable zachowanie dla tej dziedzinie (patrz przykład powyżej
  • po drugie: sam będziesz musiał to zrobić:

Najprostszym sposobem jest zmierza do funkcji preSave Twojego modelu i wykonuje tę czynność tutaj. Na przykład:

class Article extends BaseArticle 
{ 
    public function preSave($event) 
    { 
    if(array_key_exists("your_field", $this->getModified()) 
    { 
     $this->setUpdatedAt(time()); 
    } 
    } 
+0

ok, idealne dzięki. Chciałbym zaktualizować update_at tylko wtedy, gdy zmodyfikowano tylko jedno pole mojej tabeli: czy to możliwe? – satboy78

+0

Zaktualizowałem moją odpowiedź – j0k

+0

ok, wielkie dzięki. Spróbuję tego. – satboy78