2012-02-06 2 views
5

Ecco la mia definizione di tabella per lo schema Propel. La colonna modified ha il tipo timestamp (DateTime in PHP) e desidero assegnare un valore predefinito a ora. Ho provato a installare a "ora", ma sto ottenendo un errore utilizzando propel-gen insert-sql comando:Come specificare defaultValue su "now" per una colonna timestamp in Propel?

"syntaxt errore o di violazione di accesso:. 1067 valore di default non valido per 'modificato'

qualcuno sa come posso impostare il valore di default per ora una colonna timestamp a Propel?

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

risposta

5

cambiare il nome in "updated_at", che è un campo speciale in Propel che verrà automaticamente aggiornato per NOW() ogni volta che si aggiorna il campo. "created_at" è anche simile e farà la stessa cosa quando viene creato il tuo oggetto.

Nel modello è sempre possibile eseguire il proxy "modificato" o getModified() per getUpdatedAt() per completare la funzionalità.

Se si deve avere "modificato" come nome per la colonna, è necessario scrivere un comportamento, che ritengo sia più lavoro che è necessario per realizzare questo. Puoi trovare informazioni sui comportamenti qui.

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

11

Nelle versioni più recenti di Propel è possibile specificare che si colonna in questo modo:

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

E 'quindi compatibile cross-db.

+0

Questa dovrebbe essere la risposta accettata in quanto è più accurata! – tmuecksch

+0

D'accordo, questo è più preciso e dovrebbe essere la risposta accettata –

2

La documentazione a http://propelorm.org/behaviors/timestampable.html non specificano se questo è disponibile in 1.6, ma aggiungono che questo schema e costruire:

<behavior name="timestampable" /> 

Il modello ha ora due nuove colonne, created_at e updated_at, che memorizzano automaticamente un timestamp aggiornato al risparmio:

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

Bella risposta, grazie! –