php - updateorcreate - laravel created_at



Insertar datos de created_at con Laravel (4)

Actualmente (Laravel 5.4) la forma de lograrlo es:

$model = new Model();
$model->created_at = Carbon::now();
$model->save(['timestamps' => false]);

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 )


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í.


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);




laravel-4