Métodos load(), loadWhere(), loadWhereEq() y reload() del modelo
Los modelos tienen los métodos load(), loadWhere() y reload() para recuperar registros. El método loadFromCode() permanece como alias por compatibilidad, pero está en desuso y debería evitarse en el código nuevo.
⚡ load($code)
Permite cargar el registro cuyo valor de clave primaria coincide con $code.
Parámetros
- code: Valor de la clave primaria. Si es
null, el método devuelveFALSEsin realizar consultas.
Retorno y efectos
- Devuelve
TRUEsi encuentra el registro y carga los datos en el modelo. - Devuelve
FALSEsi no existe y limpia el estado (clear()), dejando el modelo sin identificador. - Tras una carga correcta se sincronizan los valores originales (
syncOriginal()), lo que permite detectar cambios antes de guardar.
Ejemplo: Cargar el cliente 123
use FacturaScripts\Core\Model\Cliente;
$cliente = new Cliente();
if ($cliente->load('123')) {
// OK, hemos cargado los datos del cliente 123
} else {
// No existe ningún cliente 123
}
⚡ loadWhere(array $where, array $order = [])
Permite cargar el primer registro que cumple una lista de filtros.
Parámetros
- where: Array de filtros. Lo habitual es usar objetos de la clase
FacturaScripts\Core\Where.- Construye filtros
AND/ORcon métodos comoWhere::eq(),Where::orLike(),Where::sub(), etc. - Puedes filtrar varios campos a la vez usando el separador
|en la definición (Where::like('nombre|razonsocial', 'demo')). - Los operadores soportados incluyen
=,!=,>,<,BETWEEN,IN,LIKE,XLIKE,REGEXP, además de comparaciones entre columnas mediante valoresWhere::column('campo', 'field:otro_campo').
- Construye filtros
- order: (opcional) Array asociativo
['campo' => 'ASC|DESC']que se aplica al conjunto filtrado. Admite varios campos de ordenación.
Retorno y efectos
- Devuelve
TRUEsi encuentra un registro y lo carga. - Devuelve
FALSEsi no hay coincidencias y limpia el estado del modelo. - También sincroniza los valores originales para que funciones como
hasChanged()sigan operativas.
Ejemplo: Cargar el cliente con teléfono 555444333
use FacturaScripts\Core\Model\Cliente;
use FacturaScripts\Core\Where;
$cliente = new Cliente();
if ($cliente->loadWhere([Where::eq('telefono1', '555444333')])) {
// OK
} else {
// Cliente no encontrado
}
Ejemplo: Combinar filtros complejos
use FacturaScripts\Core\Model\Cliente;
use FacturaScripts\Core\Where;
$where = [
Where::like('telefono1|telefono2', '%444%'),
Where::eq('estado', 'ACTIVO'),
Where::isNull('fechabaja')
];
$cliente = new Cliente();
if ($cliente->loadWhere($where, ['fechaalta' => 'DESC'])) {
// Cliente activo más reciente con un teléfono que contiene 444
}
Ejemplo: Cargar el primer producto con stock mayor que 0
use FacturaScripts\Core\Model\Producto;
use FacturaScripts\Core\Where;
$producto = new Producto();
$producto->loadWhere([Where::gt('stockfis', 0)], ['stockfis' => 'ASC']);
⚡ loadWhereEq(string $field, $value)
Atajo para llamar a loadWhere() con un filtro de igualdad sobre un único campo.
Parámetros
- field: Nombre del campo sobre el que se aplicará el filtro.
- value: Valor que debe tener el campo. Se convierte a SQL mediante
var2str, por lo que puedes pasar cadenas, números o nulos.
Retorno y efectos
- Devuelve
TRUEsi encuentra un registro con el valor indicado. - Devuelve
FALSEsi no hay coincidencias y limpia el estado del modelo. - Internamente llama a
loadWhere([Where::eq($field, $value)]), por lo que comparte el mismo comportamiento queloadWhere().
Ejemplo: Cargar un almacén por código
use FacturaScripts\Core\Model\Almacen;
$almacen = new Almacen();
if ($almacen->loadWhereEq('codigo', 'MADRID')) {
// Almacén encontrado
}
⚡ reload()
Vuelve a cargar desde la base de datos el registro actual del modelo, machacando los valores de sus propiedades. Es útil cuando el registro puede haber cambiado por otro proceso (una extensión, un cron, otro usuario) o para descartar modificaciones hechas en memoria sin guardar.
Parámetros
No recibe parámetros. Utiliza el identificador actual del modelo ($this->id()).
Retorno y efectos
- Devuelve
TRUEsi recarga los datos correctamente. - Devuelve
FALSEsi el modelo no tiene identificador (registro nuevo, sin guardar). - Devuelve
FALSEsi el registro ya no existe en la base de datos; en ese caso además se limpia el estado del modelo (clear()). - Internamente llama a
load($this->id()), por lo que tras una recarga correcta también se sincronizan los valores originales (syncOriginal()). - Las extensiones del modelo pueden engancharse con los hooks
reloadBefore(puede cancelar la recarga devolviendoFALSE) yreload.
Ejemplo: Descartar cambios no guardados
use FacturaScripts\Core\Model\Producto;
$producto = new Producto();
$producto->load('123');
$producto->precio = 100.0;
// nos arrepentimos y recuperamos los datos de la base de datos
if ($producto->reload()) {
// $producto->precio vuelve a tener el valor guardado
}
Evita loadFromCode()
loadFromCode() sigue existiendo como alias para proyectos antiguos, pero está deprecated. No admite todas las capacidades de Where y será retirado en futuras versiones. Siempre que necesites cargar datos:
- Usa
load($codigo)si conoces la clave primaria. - Usa
loadWhere($filtros, $orden)para cualquier otra búsqueda.