Laravel migraciones Datetime

publicado por: Anonymous

Estoy realizando un insert a mi tabla usuario, quiero que me inserte en un campo la fecha y en otro la hora, pero tengo la función “timestamp” la cual pone por defecto ambas en el mismo campo, ¿ como podría estructurar para que las tome en campos diferentes ?
La fecha y hora las quiero tomar del sistema

Esta es mi migración

public function up()
{
    Schema::create('usuario', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('chat_id');
        $table->string('name');
        $table->integer('tries')->default(0);
        $table->timestamp();

    });

}

Eh intentado utilizando la clase Carbon de laravel pero no me funciona en mi insert

Esta es la sugerencia que me hicieron, pero no me funciona:

<?php

namespace App;

use BotManBotManInterfacesUserInterface;
use IlluminateDatabaseEloquentModel;
use IlluminateSupportCarbonCarbon;

class Usuarios extends Model
{

protected $fillable = ['chat_id', 'name', 'tries',,'mi_fecha','mi_hora'];
protected $table = 'usuario';

protected $casts = [
'mi_fecha' => 'datetime:Y-m-d',
'mi_hora' => 'datetime:H:i:s'
];

// $mytime = CarbonCarbon::now();

public static function saveUser(UserInterface $botUser)
{
    $user = static::updateOrCreate(['chat_id' => $botUser->getId()], [
        'chat_id' => $botUser->getId(),
        'name' => $botUser->getFirstName().' '.$botUser->getLastName(),
        'mi_fecha' => $miFecha = now()->toDateString();
        'mi_hora' => $miHora = now()->toTimeString();
    ]);
    $user->increment('tries');
    $user->save();
    return $user;
}



}

?>

solución

Define entonces dos campos en la migración, uno para la fecha y otro para la hora:

$table->date('mi_fecha');
$table->time('mi_hora');

Recuerda (en caso de ser necesario) definirlos como fechas en el modelo, y utilizar la propiedad casts para el formato deseado:

/**
 * The attributes that should be mutated to dates.
 *
 * @var array
 */
protected $dates = [
    'mi_fecha', 'mi_hora'
];

/**
 * The attributes that should be cast to native types.
 *
 * @var array
 */
protected $casts = [
    'mi_fecha' => 'datetime:Y-m-d',
    'mi_hora' => 'datetime:H:i:s'
];

Al momento de almacenarlos, obtienes la parte que necesitas, directamente de la instancia de Carbon:

$miFecha = now()->toDateString();
$miHora = now()->toTimeString();

O con el método format();

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *