🗄️ Modelo de Datos - Mascota.php

Análisis completo del modelo que gestiona la estructura de datos

📋 Código Completo del Modelo

Model/Mascota.php
<? php
namespace FacturaScripts\Plugins\MiPlugin\Model;

use FacturaScripts\Core\Model\Base\ModelClass;
use FacturaScripts\Core\Model\Base\ModelTrait;

class Mascota extends ModelClass
{
    use ModelTrait;

    public $idmascota;
    public $nombre;
    public $edad;
    public $especie;
    public $genero;
    public $fechanacimiento;

    public static function primaryColumn(): string
    {
        return 'idmascota';
    }

    public static function tableName(): string
    {
        return 'mascotas';
    }
}

🔍 Análisis Detallado del Modelo

📁 Namespace y Imports

namespace FacturaScripts\Plugins\MiPlugin\Model;

Propósito: Organiza el código según la estructura de carpetas del plugin.

  • Sigue el estándar PSR-4 de autoloading
  • Corresponde con la carpeta Model/
  • Evita conflictos con otros plugins

🎯 Clase y Herencia

class Mascota extends ModelClass

Ventajas de heredar de ModelClass:

  • CRUD automático (Create, Read, Update, Delete)
  • Validaciones integradas
  • Gestión de eventos del ciclo de vida
  • Compatibilidad con el core de FacturaScripts

🔄 ModelTrait

use ModelTrait;

Funcionalidades que proporciona:

  • save() - Guardar registro
  • delete() - Eliminar registro
  • loadFromCode() - Cargar por ID
  • exists() - Verificar existencia
  • clear() - Limpiar propiedades

🏗️ Estructura de Propiedades

Propiedad Tipo BD Descripción Restricciones
$idmascota serial Clave primaria auto-incremental 🔑 PRIMARY KEY, NOT NULL
$nombre varchar(25) Nombre de la mascota 📛 NOT NULL
$edad integer Edad en años 🔢 Opcional
$especie varchar(25) Especie (perro, gato, etc.) 🐾 Opcional
$genero varchar(25) Género (macho, hembra) ⚧ Opcional
$fechanacimiento date Fecha de nacimiento 📅 Opcional

⚙️ Métodos Esenciales

primaryColumn()

public static function primaryColumn(): string
{
    return \'idmascota\';
}

Función: Define qué columna es la clave primaria de la tabla.

Importancia: Esencial para operaciones CRUD y relaciones.

tableName()

public static function tableName(): string
{
    return \'mascotas\';
}

Función: Especifica el nombre de la tabla en la base de datos.

Convención: Usar plural para nombres de tablas.

💾 Ejemplos de Uso del Modelo

Crear Nueva Mascota

$mascota = new Mascota();
$mascota->nombre = 'Max';
$mascota->especie = 'Perro';
$mascota->edad = 3;
$mascota->genero = 'Macho';
$mascota->fechanacimiento = '2020-05-15';
$mascota->save();

Buscar Mascota por ID

$mascota = new Mascota();
if ($mascota->loadFromCode(1)) {
    echo $mascota->nombre; // 'Max'
}

Listar Todas las Mascotas

$mascotaModel = new Mascota();
$mascotas = $mascotaModel->all();
foreach ($mascotas as $mascota) {
    echo $mascota->nombre;
}

⚠️ Problemas Comunes y Soluciones

Error: "Class not found"

Causa: Namespace incorrecto o archivo en carpeta equivocada.

Solución: Verificar que la carpeta sea Model/ y el namespace corresponda.

Error: "Table doesn't exist"

Causa: La tabla no se creó automáticamente.

Solución: Revisar Table/mascotas.xml y reactivar el plugin.

Error: "Undefined property"

Causa: Propiedad no definida en el modelo o typo en el nombre.

Solución: Verificar que las propiedades coincidan con las columnas de la BD.

🚀 Mejoras Posibles

Validaciones Avanzadas

Agregar métodos de validación para campos específicos:

public function test(): bool
{
    if (empty($this->nombre)) {
        Tools::log()->error('El nombre es obligatorio');
        return false;
    }
    return true;
}

Relaciones con Otros Modelos

Conectar con modelo de dueños:

public function getCliente()
{
    return (new Cliente())->loadFromCode($this->codcliente);
}