Tema: subquerys
Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/01/2017, 08:10
Triby2
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: subquerys

Antes de comenzar decirte que en tienes un par de errores con las clases:
- clase Activo, la tabla ha de ser 'catalogo_activos'.
- clase Ducto, la tabla ha de ser 'catalogo_ductos'.

Código PHP:
// Primero creas los subqueries por separado
$sub1 Instalacion::select('nombre')
                 ->
join('instalacion_ducto_origen_destino''instalacion_ducto_origen_destino.id_instalacion''=''catalogo_instalaciones.id')
                 ->
join('catalogo_tipo_instalaciones''catalogo_instalaciones.id_tipo_instalacion''=''catalogo_tipo_instalaciones.id')
                 ->
join('catalogo_ductos''catalogo_ductos.id''=''instalacion_ducto_origen_destino.id_ducto')
                 ->
where('instalacion_ducto_origen_destino.tipo''Origen');

$sub2 Instalacion::select('nombre')
                 ->
join('instalacion_ducto_origen_destino''instalacion_ducto_origen_destino.id_instalacion''=''catalogo_instalaciones.id')
                 ->
join('catalogo_tipo_instalaciones''catalogo_instalaciones.id_tipo_instalacion''=''catalogo_tipo_instalaciones.id')
                 ->
join('catalogo_ductos''catalogo_ductos.id''=''instalacion_ducto_origen_destino.id_ducto')
                 ->
where('instalacion_ducto_origen_destino.tipo''Destino');

Ducto::select('id''abr''catalogo_tipo_ductos.nombre''clave''catalogo_instalaciones.nombre''diametro''kilometraje'DB::raw("({$sub1->toSQL()}) as Origen"), DB::raw("({$sub2->toSQL()}) as Destino"))
         ->
join('catalogo_activos''catalogo_ductos.id_activo''=''catalogo_activos.id')
         ->
join('catalogo_tipo_ductos''catalogo_ductos.id_tipo_ducto''=''catalogo_tipo_ductos.id')
         ->
join('catalogo_instalaciones''catalogo_instalaciones.id_activo''=''catalogo_activos.id')
         ->
get();
         
         
/*Yo no lo he probado esa consulta, espero que te funcione, si no, prueba de incluirle antes del get() esto:
         ->mergeBindings($sub1->getQuery())
         ->mergeBindings($sub2->getQuery())

         y si aún así no te funciona, pues te deseo mucha suerte pero ya tienes una idea más clara
         
         Nota: INNER JOIN = join() y LEFT JOIN = leftjoin()*/ 

Por otra parte yo te recomendaría que utilizases una nomenclatura más simple y sencilla para todas las tablas y campos, la verdad que es muy fácil equivocarse a cada rato con esos nombres y debe de cansar muchisimo trabajar así.

Última edición por Triby2; 24/01/2017 a las 22:23 Razón: me faltó un dato