php - update - laravel insert timestamps
Insertar datos de created_at con Laravel (5)
Parece que no puedo insertar los datos de created_at
en la tabla de la base de datos con Laravel. Estoy intentando obtener esos datos de un POST y luego intentar guardarlos en la base de datos.
Actualmente estoy haciendo esto:
$create_dt = date("Y-m-d H:i:s A", strtotime($_POST[''post_date'']." ".$_POST[''post_time'']));
$name = $_POST[''name''];
$post = new Post();
$post->name = $name;
...
$post->created_at = $create_dt;
$post->save();
Pero da un error:
Uncaught exception ''InvalidArgumentException'' with message in Carbon.php
y
Unexpected data found. Unexpected data found. Data missing in Carbon.php
¿Como puedo resolver esto? ¿Debo establecer $timestamps
en mis modelos en falso? (Realmente no quiero hacer eso porque estoy de acuerdo con cómo inserta automáticamente el updated_at
)
Actualmente (Laravel 5.4) la forma de lograrlo es:
$model = new Model();
$model->created_at = Carbon::now();
$model->save([''timestamps'' => false]);
En mi caso, quise realizar una prueba unitaria de que los usuarios no pudieron verificar sus direcciones de correo electrónico después de 1 hora, así que no quise hacer ninguna de las otras respuestas, ya que también persistirían cuando no fuera una prueba unitaria, por lo que Terminé simplemente actualizando manualmente la fila después de insertar:
// Create new user
$user = factory(User::class)->create();
// Add an email verification token to the
// email_verification_tokens table
$token = $user->generateNewEmailVerificationToken();
// Get the time 61 minutes ago
$created_at = (new Carbon())->subMinutes(61);
// Do the update
/DB::update(
''UPDATE email_verification_tokens SET created_at = ?'',
[$created_at]
);
Nota: Para cualquier otra cosa que no sea la prueba de unidad, vería las otras respuestas aquí.
En su modelo de User
, agregue la siguiente línea en la clase de User
:
public $timestamps = true;
Ahora, cada vez que guarde o actualice un usuario, Laravel actualizará automáticamente los campos created_at
y updated_at
.
Actualizar:
Si desea configurar el valor creado manualmente, debe utilizar el formato de fecha Ymd H:i:s
. El problema es que el formato que ha utilizado no es el mismo que utiliza Laravel para el campo created_at
.
Actualización: noviembre de 2018 Laravel 5.6 "message": "Access level to App//Note::$timestamps must be public",
Asegúrese de tener también el nivel de acceso adecuado. Laravel 5.6 es public
.
Puede configurar esto manualmente usando Laravel, solo recuerde agregar ''created_at'' a su $ $ array:
protected $fillable = [''name'', ''created_at''];
$data = array();
$data[''created_at''] =new /DateTime();
DB::table(''practice'')->insert($data);