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í.