Laravel - Clase Model, sobrecargar métodos principales

Iniciado por fran800m, 30 Diciembre 2016, 16:03 PM

0 Miembros y 1 Visitante están viendo este tema.

fran800m

La idea es la siguiente:

Hay un campo de una tabla que va comprimido como BLOB.

Quiero que la compresión / descompresión sea transparente para quien use la clase, que no tenga que andar haciendo:

$objModel->campo = gzencode($objModel->campo);
$objModel->campo = gzdecode($objModel->campo);


Para ello he decidido sobrecargar métodos en la clase que hereda de Model.
Para la grabación ya lo he logrado, sobrecargando el método save, de manera:

public function save($attributes[] = null)
{
$this->campo = gzencode($objModel->campo);
return parent::save($attributes);
}


Pero para la obtención de datos de la BD y realizar la descompresión "transparente" he probado a sobrecargar boot(), __call, __callstatic, etc y nada.

¿Alguien sabría qué método es el que instancia y "rellena" las propiedades de la clase, para poder hacer a continuación el gzdecode?

Si veis algún fallo perdonadme, he escrito el código de memoria.

ThinkByYourself

#1
Hola!

Para una clase en PHP plano están los denominados "métodos mágicos" de __get y __set:

https://stackoverflow.com/questions/4713680/php-get-and-set-magic-methods
http://nl.php.net/__get

Peeero parece ser que Laravel ya juega con ellos. Y deja al programador jugar con lo que denomina "Accessors" (para el __get) y "Mutators" (para el __set):

https://laravel.com/docs/5.3/eloquent-mutators

Creo que funcionaría así para el caso que indicas (suponiendo que tu clase modelo se llamase ClassModel):

Código (php) [Seleccionar]
class ClassModel extends Model {

   public function setCampoAttribute($value)
   {
       return gzencode($value);
   }

   public function getCampoAttribute($value)
   {
       return gzdecode($value);
   }

}


Esto vale para la versión 5.3 de Laravel, que no sé si es la que estás usando.

No lo he probado, todo hay que decirlo, sólo imagino que será algo así.

Saludos!
No te voy a engañar.
Todos hemos sido programados para normalizar la psicopatía de las élites económicas y políticas, y para realimentar su patrón de ciega codicia.

fran800m

Gracias NoBullshit, estoy "poniendo los cuernos" al foro con stackoverflow y acabo de leerte. Eso sí, allí no me hablaron de los métodos mágicos __get y __set  ;-)

Acertaste con los Accessors y Mutators, ya va todo fino, y precisamente es con Laravel 5.3 con lo que estoy liado, te lo comento por si alguna vez te hace falta y puedo estaré encantado de echarte un cable  ;)

Un saludo,