🗄️ Modelo de Datos - Mascota.php
Análisis completo del modelo que gestiona la estructura de datos
📋 Código Completo del Modelo
<? 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
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
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
Funcionalidades que proporciona:
save()- Guardar registrodelete()- Eliminar registroloadFromCode()- Cargar por IDexists()- Verificar existenciaclear()- 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);
}