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

Relacion de Modelos y Alias

Estas en el tema de Relacion de Modelos y Alias en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola compañeros, soy nuevo usando el Framework Laravel, estoy usando la version LTS 5.1. Estoy creando una API que me toco hacer en el trabajo ...
  #1 (permalink)  
Antiguo 09/03/2016, 13:39
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Relacion de Modelos y Alias

Hola compañeros, soy nuevo usando el Framework Laravel, estoy usando la version LTS 5.1.
Estoy creando una API que me toco hacer en el trabajo y tengo un problema al momento de usar alias en mis consultas con Eloquent, se preguntaran para usar alias, bueno en mi caso lo requiere bastante, bueno coloco aqui mi codigo:

Código PHP:

        $products 
ApiRestProductos::select('PRO_EMPRESA as empresa''PRO_CODIGO as codigo'
                        
'PRO_NOMBRE as nombre''PRO_DESCRI as descripcion''PRO_TIPPREC as tipo_precio'
                        
'PRO_CODUND as unidad_medida''PRO_TIPIVA as tipo_iva''PRO_CATEGORIAS as categorias'
                        
'PRO_RUTAIMG as ruta_img''PRO_ACTIVO as activo_inactivo')
                ->
with(['precio' => function($query){
                    
$query->select('PRE_CODPRO','PRE_CODLIS','PRE_MONTO');
                  }])
                ->
get(); 
Aqui me pasa algo curioso, en ese codigo, me muestra todos los datos del select(), es decir de la consulta a la primera tabla, pero no me muestra los datos del modelo de precios que en mi caso llamo al metodo "precio", solo muestra un array vacio. Tambien sucede que si quito toda la parte del select() y dejo solo los campos que quiero de la tabla de precio, me muestra todo bien pero sin los alias y es necesario que los campos tengan alias.

El metodo de mi modelo es este:

Código PHP:
        public function precio()
    {
        return 
$this->hasMany('ApiRest\Precios''PRE_CODPRO''PRO_CODIGO');
    } 
la respuesta que obtengo de esto es la siguiente:

Código PHP:

{
  
"estado""correcto",
  
"code"200,
  
"products": [
    {
      
"empresa""000001",
      
"codigo""0000000002",
      
"nombre""Prueba",
      
"descripcion""Prueba",
      
"tipo_precio""A",
      
"unidad_medida""UND",
      
"tipo_iva""GN",
      
"categorias"17,
      
"ruta_img""imagen.jpg",
      
"activo_inactivo"1,
      
"precio": []
    }
   ]

Espero puedan ayudarme con esto.

Saludos
  #2 (permalink)  
Antiguo 09/03/2016, 15:16
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Relacion de Modelos y Alias

Eso se hace con el query builder mire la documentación https://laravel.com/docs/5.1/queries
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 09/03/2016, 17:09
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Relacion de Modelos y Alias

Ya la documentacionla habia visto, el problema es que si vez en el codigo, en la parte del with() no me esta devolviendo el resultado, mientras que para el select() si me muestra todo, como muestra la respuesta, con alias aplicandos:

Código PHP:
Ver original
  1. {
  2.   "estado": "correcto",
  3.   "code": 200,
  4.   "products": [
  5.     {
  6.       "empresa": "000001",
  7.       "codigo": "0000000002",
  8.       "nombre": "Prueba",
  9.       "descripcion": "Prueba",
  10.       "tipo_precio": "A",
  11.       "unidad_medida": "UND",
  12.       "tipo_iva": "GN",
  13.       "categorias": 17,
  14.       "ruta_img": "imagen.jpg",
  15.       "activo_inactivo": 1,
  16.       "precio": []
  17.     }
  18.    ]
  19. }

el problema es en el with() que no devuelve nada, solo el array vacio, disculpen si no me he explicado bien
  #4 (permalink)  
Antiguo 09/03/2016, 17:24
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Relacion de Modelos y Alias

Tienes que hacer un join, revisa la documentación
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 09/03/2016, 20:03
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Relacion de Modelos y Alias

Gracias por responder hhs, fijate, he leido la documentacion, tanto de Fluent Query Builder como de Eloquent ORM.

En mi desarrollo combino ambas cosas, hice esto:

Código PHP:
Ver original
  1. $products = \ApiRest\Productos::select('PRO_EMPRESA', 'PRO_CODIGO', 'PRO_NOMBRE', 'PRO_DESCRI', 'PRO_TIPPREC',
  2.                         'PRO_CODUND', 'PRO_TIPIVA', 'PRO_CATEGORIAS', 'PRO_RUTAIMG', 'PRO_ACTIVO')
  3.                 ->with(['precio' => function($query){
  4.                     $query->select('PRE_CODPRO','PRE_CODLIS','PRE_MONTO');
  5.                   }])
  6.                 ->get();

y la respuesta que obtengo es esta:

Código PHP:
Ver original
  1. {
  2.   "estado": "correcto",
  3.   "code": 200,
  4.   "products": [
  5.     {
  6.       "PRO_EMPRESA": "000001",
  7.       "PRO_CODIGO": "0000000003",
  8.       "PRO_NOMBRE": "Papas",
  9.       "PRO_DESCRI": "Papas",
  10.       "PRO_TIPPREC": "A",
  11.       "PRO_CODUND": "UND",
  12.       "PRO_TIPIVA": "GN",
  13.       "PRO_CATEGORIAS": 14,
  14.       "PRO_RUTAIMG": "potatoes_saco.jpg",
  15.       "PRO_ACTIVO": 1,
  16.       "precio": [
  17.         {
  18.           "PRE_CODPRO": "0000000003",
  19.           "PRE_CODLIS": "A",
  20.           "PRE_MONTO": "245.00"
  21.         },
  22.         {
  23.           "PRE_CODPRO": "0000000003",
  24.           "PRE_CODLIS": "B",
  25.           "PRE_MONTO": "400.00"
  26.         }
  27.       ]
  28.     }
  29.   ]
  30. }

Solo le quite los alias a ambas consultas, al parecer cada vez que aplico un alias se desactiva la relacion al modelo precio.

Gracias por sus respuestas

Etiquetas: laravel
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:52.