En cualquier sistema es importante tener un log o una bitácora en donde vallamos almacenando lo cambios que vamos realizando en la base de datos, por ejemplo, ir guardando la información que va insertando el usuario a la tabla de clientes, también cuando se elimino y actualizo grabando un timestamp que guarde hasta el segundo exacto de modificación y ya con eso vamos llevando un control

Haremos todo esto en CodeIgniter 4

Empezamos primero creamos la tabla

--

-- Estructura de tabla para la tabla bitacora

CREATE TABLE bitacora (
id bigint(20) NOT NULL,
descripcion text COLLATE utf8_spanish2_ci DEFAULT NULL,
usuario varchar(16) COLLATE utf8_spanish2_ci DEFAULT NULL,
created_at datetime DEFAULT NULL,
deleted_at datetime DEFAULT NULL,
updated_at datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci;

--

-- Índices para tablas volcadas

--

-- Indices de la tabla bitacora

ALTER TABLE bitacora
ADD PRIMARY KEY (id);

ALTER TABLE bitacora
MODIFY id bigint(20) NOT NULL AUTO_INCREMENT;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


Creamos el archivo modelo BitacoraModel.php

<?php

namespace App\Models;

use CodeIgniter\Model;

class BitacoraModel extends Model
{
protected $table = 'bitacora';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;

protected $returnType     = 'array';
protected $useSoftDeletes = true;

protected $allowedFields = ['id','descripcion', 'usuario'];

protected $useTimestamps = true;
protected $createdField  = 'created_at';
protected $deletedField  = 'deleted_at';

protected $validationRules    = [];
protected $validationMessages = [];
protected $skipValidation     = false;



const ORDERABLE = [
    1 => 'id',
    2 => 'descripcion',
    3 => 'usuario',
    4 => 'created_at',

];

/**
 * Get resource data.
 *
 * @param string $search
 *
 * @return \CodeIgniter\Database\BaseBuilder
 */
public function getResource(string $search = '')
{
$builder = $this->builder()
->select('id, descripcion, usuario, created_at');    
$condition = empty($search)
        ? $builder
        : $builder->groupStart()
            ->like('descripcion', $search)
            ->orLike('Usuario', $search)
            ->orLike('created_at', $search)
        ->groupEnd();

    return $condition->where('deleted_at', null);
}


Ahora usaremos el modelo para guardar cada vez que se haga un cambio al guardar la configuración del hospital

<?php
namespace agungsugiarto\boilerplate\Controllers\Users;
namespace App\Controllers;




use CodeIgniter\API\ResponseTrait;
use CodeIgniter\Controller;
use App\Models\ConfiguracionesModel;
use App\Models\BitacoraModel;
use agungsugiarto\boilerplate\Controllers\BaseController;
use agungsugiarto\boilerplate\Entities\Collection;
use agungsugiarto\boilerplate\Models\GroupModel;




use CodeIgniter\Config\Services;


class HospitalController extends Controller
{

    use ResponseTrait;

    /** @var \agungsugiarto\boilerplate\Models\GroupModel */
    protected $group;
    protected $configuraciones;
    protected $bitacora;

    public function __construct()
    {

        $this->group = new GroupModel();
        $this->configuraciones = new ConfiguracionesModel();
        $this->bitacora = new BitacoraModel();
        $autorize = $this->authorize = Services::authorization();
        helper('menu');

    }

    public function index()
    {


        $datos = $this->configuraciones->where("id",1)->first();

        $data["title"] = lang('settings.settings.title');
        $data["subtitle"] = lang('settings.settings.title');
        $data["data"] = $datos;

        return view('configuracionEmpresa/index',$data);


    }


    public function guardar()
    {


        helper('auth');
        $userName = user()->username ;
        $idUser  = user()->id ;






        $bitacoraDatos["descripcion"] = "Se Modifico las configuracion con los siguientes datos:". json_encode($_POST);
        $bitacoraDatos["usuario"] = $userName;


        //GUARDA CONFIGURACIONES
        $this->configuraciones->update(1,$_POST);

        //GUARDAR EN BITACORA
       $this->bitacora->save($bitacoraDatos);
        //  return redirect()->to("/admin/hospital");
       return redirect()->back()->with('sweet-success', 'Actualizado Correctamente');
         // return redirect()->back()->with('sweet-success','Guardado Correctamente');

          }

}

Ya con eso cada vez que se haga un cambio a a configuración nos guardara un registro sobre quien hizo el cambio y también nos servirá para los próximos módulos que se vallan programando.

En la próxima publicación veremos como mostrar los datos en un datatable.