Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Laravel - Modificar columna en metodo all()

Estas en el tema de Laravel - Modificar columna en metodo all() en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenos días, acabo de comenzar con Laravel, a partir de una BD existente he generado los componentes necesarios(models,repositories, controllers, routes) para una API. Una de ...
  #1 (permalink)  
Antiguo 04/07/2019, 05:04
 
Fecha de Ingreso: noviembre-2003
Mensajes: 61
Antigüedad: 16 años
Puntos: 0
Laravel - Modificar columna en metodo all()

Buenos días, acabo de comenzar con Laravel, a partir de una BD existente he generado los componentes necesarios(models,repositories, controllers, routes) para una API.

Una de mis tablas tiene una relación uno a muchos, mi controller en su método index simplemente me retorna (en data, usando moduloRepository->all()) algo así:

[
{ id:1, title:"Hello", idcategoria:1 }
]

Cómo y cual es el lugar correcto (model ó repository) para modificar la respuesta dada a esto:

[
{ id:1, title:"Hello", idcategoria:1, categoria:"Principal" }
]

Gracias de antemano
  #2 (permalink)  
Antiguo 04/07/2019, 08:53
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 6 años, 4 meses
Puntos: 379
Respuesta: Laravel - Modificar columna en metodo all()

Siempre documenta bien tu pregunta, explicando bien el problema que tienes y lo que quieres hacer y tambien es importante que muestres el código necesario. porque toma mucho tiempo hacer suposiciones y quien tien puede contestar no tiene tiempo para hacer supociiones.

Por otro lado no se requiere crear repositorios en Laravel, los repositorios tienen un lugar en algunos cuantos casos. De hecho lo que estas haciendo en este momento complicar tu solución haciendo sobre ingenieria.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 04/07/2019, 12:59
 
Fecha de Ingreso: noviembre-2003
Mensajes: 61
Antigüedad: 16 años
Puntos: 0
Respuesta: Laravel - Modificar columna en metodo all()

Gracias por tu respuesta, intentaré ser más específico.

Gran parte del código lo he generado con la herramienta InfyOm Laravel Generator . El cual automaticamente crea los repositorios, leí al respecto y no me pareció mala idea mantener ese patrón de diseño, evitando refactorizar lo generado hasta el momento.

Llegado el momento de acomodar mi ApiController para adaptar los datos es donde he llegado a este punto, tengo este metodo:

Código:
public function index(Request $request)
    {
        $acciones = $this->accionesRepository->all(
            $request->except(['skip', 'limit']),
            $request->get('skip'),
            $request->get('limit')
        );

        return $this->sendResponse($acciones->toArray(), 'Acciones retrieved successfully');
    }
Tengo la tablas acciones y categorias, relacionadas 1:n

Y esto en mi modelo Acciones:
Código:
public function categoria()
    {
        return $this->belongsTo(\App\Models\Categorias::class, 'idcategoria');
    }
Como es de suponer ha sido generado por InfyOm, y hace un llamado a accionesRepository, el cual me devuelve algo parecido a lo del ejemplo con el que inicie el post, un listado de acciones. Entonces no estoy seguro si debo agregar en AccionesRepository.php o en mi modelo Acciones.php y crear mi metodo all() personalizado, agregando la columna en cuestión.

El metodo all() mencionado no esta en ninguno de mis archivos, es heredado de alguna clase base de Laravel.

Leyendo intenté algo así en AccionesRepository:
Código:
    public function all(){
        return Acciones::with('categoria')->get(); 
    }
Y no funcionó, lo cual me indica que estoy fallando en algo básico o de concepto.

Espero haberme explicado mejor. Gracias por su paciencia
  #4 (permalink)  
Antiguo 04/07/2019, 14:20
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 6 años, 4 meses
Puntos: 379
Respuesta: Laravel - Modificar columna en metodo all()

Como te comente en el post anterior, los repositorios en Laravel son un problema y mas cuando la aplicación crece y la razón es porque no son repositorios reales.
Lo que me muestras es un wrapper que repite las funciones que ya tiene Eloquent. Un repositorio real hace mas cosas que eso.

Si tu quieres obtener solo ciertos campos de el agregado de dos modelos, lo unico que tienes que hacer es usar with y get.

Código PHP:
Ver original
  1. $actiones = Acciones::with('categoria:id,name')->get(['id','name']);
  2. return $this->sendResponse($acciones->toArray(), 'Acciones retrieved successfully');
El repositorio esta de mas, y solo te ayuda a duplicar código.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.



La zona horaria es GMT -6. Ahora son las 15:50.