Imagina que estas desarrollando un API REST para una aplicación que permite a los usuarios publicar anuncios de venta de productos y servicios. Una de las políticas de la aplicación es que los usuarios no deben publicar números de contacto en el contenido de los anuncios.
Entonces usando un modelo Advert
recuperas los anuncios de los usuarios. Por su puesto, paginamos los resultados para evitar retornar cientos o miles de resultados al cliente.
App\Models\Advert;
$advert = Advert::paginate(50);
return $advert;
Pero recuerda que no puedes simplemente confiar en que los usuarios han leído los términos y condiciones de uso de la aplicación y van a respetarlos. Por otro lado, podríamos controlar el ingreso de números de teléfono al momento de en que los usuarios crean los anuncios. Sin embargo, vamos a ponernos en el escenario en el que queremos guardar la información tal como el usuario la ingresó.
Así que necesitamos una forma de obtener los resultados paginados y modificarlos antes de enviarlos de vuelta al cliente. Para ello usamos el método through
después de paginar los resultados. Este método recibe un closure como parámetro y lo aplica a cada uno de los resultados de la paginación.
App\Models\Advert;
$advert = Advert::paginate(50)
->through(function ($advert) {
$advert->content = preg_replace('/(\d\s?){9,10}/', '[Número de teléfono oculto]', $advert->content);
});
return $advert;
En el ejemplo utilizamos una expresión regular para modificar cualquier secuencia de números consecutivos de 9 o 10 dígitos que podrían ser un número de teléfono. Claro, es una expresión regular muy básica que probablemente no toma en cuenta todos los escenarios posibles, pero la idea está clara.
Al usar through logramos modificar los resultados, manteniendo $advert
como objeto de paginación. Por supuesto este es un ejemplo muy simplificado y habrá muchos otros casos en los que este método pueda serte útil.