Ho appena finito un intoppo con timestamp di Eloquent (Laravel 5.2.10). Per impostazione predefinita, il metodo $table->timestamps()
fornisce una colonna e una colonna updated_at
nella tabella che vengono aggiornate di conseguenza.Laravel Eloquent created_at si aggiorna
Tuttavia, quando stavo cercando alcune voci di test, ho notato che quando si aggiorna un record, il campo updated_at
viene aggiornato, come dovrebbe, ma il created_at
campo anche viene aggiornato: le sue ore rimane al momento creato , ma i minuti e i secondi vengono aggiornati per corrispondere al campo updated_at
.
Se era troppo prolisso, ecco un esempio:
+---------------------+---------------------+
| created_at | updated_at |
+---------------------+---------------------+
| 2016-01-13 17:13:27 | 2016-01-13 22:13:27 |
| 2016-01-13 16:14:41 | 2016-01-13 21:14:41 |
+---------------------+---------------------+
Si noti che i minuti ei secondi sono la stessa identica per il campo created_at
e updated_at
.
Ho cercato di esaminare la classe Model
in cui sono impostati i timestamp, ma risulta che il metodo setCreatedAt()
non viene effettivamente chiamato quando si aggiorna un record.
Perché succede?
Come si impedisce la modifica del campo created_at
? (Più importante)
Ho eseguito un "aggiornamento del compositore" che mi ha portato fino alla 5.2.10, ma il metodo 'timestamps()' non funzionava ancora correttamente.Comunque, il 'nullableTimestamps()' funziona bene, quindi lo userò per ora (il problema che mi hai indicato sembrava indicare che questo sarebbe diventato il comportamento predefinito 'timestamps()', ma per ora non funziona ancora Comunque, grazie! – tam5
@tam Ci scusiamo. A partire da 5 ore fa (Laravel 5.2.9+), le modifiche sono state ripristinate in modo che 'useCurrent()' non sia il comportamento predefinito. Ha causato alcuni problemi con le persone chi usa una versione precedente di MySQL. –
nessun problema Grazie per l'alternativa e le spiegazioni – tam5