Tema: subquerys
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/09/2016, 18:47
negro1985
 
Fecha de Ingreso: febrero-2009
Ubicación: mexico
Mensajes: 148
Antigüedad: 15 años, 2 meses
Puntos: 1
Sonrisa subquerys

Buenas noches

Tengo lo siguientes modelos

Código PHP:
class Activo extends Model{
    protected 
$table 'activos';

    protected 
$fillable = ['nombre''abr''clave''status_registro'];

    public function 
instalaciones()
    {
        return 
$this->hasMany('App\Instalacion''id_activo');
    }

    public function 
ductos()
    {
            return 
$this->hasMany('App\Ducto''id_activo');
    }
}

class 
Ducto extends Model
{
    protected 
$table 'ductos';

    protected 
$fillable = ['id_activo''id_tipo_ducto''diametro''kilometraje'];

    public function 
activo()
    {
        return 
$this->belongsTo('App\Activo''id_activo');
    }

    public function 
origen_destino()
    {
        return 
$this->hasMany('App\InstalacionDuctoOrigenDestino''id_ducto');
    }
}
class 
Instalacion extends Model
{
    protected 
$table 'catalogo_instalaciones';

    protected 
$fillable = ['id_activo','clave','nombre'];

    public function 
activo()
    {
        return 
$this->belongsTo('App\Activo''id_activo');
    }
}
class 
InstalacionDuctoOrigenDestino extends Model
{
    protected 
$table 'instalacion_ducto_origen_destino';

    protected 
$fillable = ['id_ducto''id_instalacion''tipo'];
    
    public function 
ducto()
    {
        return 
$this->belongsTo('App\Ducto''id_ducto');
    }

Le explico la relación:

1 activo tiene varios ductos
1 ducto tiene 1 origen y un destino, es decir por cada ducto agregado a la tabla ductos se agregan dos registros en la tabla instalacion_ducto_origen_destino, un registro que es el origen del ducto y el otro registro que es el destino del ducto (origen - destino).

De acuerdo a esta relacion, deseo imprimir una tabla que me muestre los registros tal y como muestro en la siguiente consulta sql:

Código:
SELECT
catalogo_ductos.id,
catalogo_activos.abr,
catalogo_tipo_ductos.nombre,
catalogo_instalaciones.clave,
catalogo_instalaciones.nombre,
catalogo_ductos.diametro,
catalogo_ductos.kilometraje,
(SELECT
		catalogo_instalaciones.nombre aS instalacion
	FROM
		catalogo_instalaciones
	INNER JOIN instalacion_ducto_origen_destino ON instalacion_ducto_origen_destino.id_instalacion = catalogo_instalaciones.id
	INNER JOIN catalogo_tipo_instalaciones ON catalogo_instalaciones.id_tipo_instalacion = catalogo_tipo_instalaciones.id
	WHERE
		instalacion_ducto_origen_destino.tipo = 'Origen'
	AND
		instalacion_ducto_origen_destino.id_ducto = catalogo_ductos.id) AS origen,
(SELECT
		catalogo_instalaciones.nombre aS instalacion
	FROM
		catalogo_instalaciones
	INNER JOIN instalacion_ducto_origen_destino ON instalacion_ducto_origen_destino.id_instalacion = catalogo_instalaciones.id
	INNER JOIN catalogo_tipo_instalaciones ON catalogo_instalaciones.id_tipo_instalacion = catalogo_tipo_instalaciones.id
	WHERE
		instalacion_ducto_origen_destino.tipo = 'Destino'
	AND
		instalacion_ducto_origen_destino.id_ducto = catalogo_ductos.id) AS destino
FROM
		catalogo_ductos
INNER JOIN catalogo_activos ON catalogo_ductos.id_activo = catalogo_activos.id
INNER JOIN catalogo_tipo_ductos ON catalogo_ductos.id_tipo_ducto = catalogo_tipo_ductos.id
INNER JOIN catalogo_instalaciones ON catalogo_instalaciones.id_activo = catalogo_activos.id
con todo lo anterior deseo utilizar eloquent para realizar esta consulta y subconsultas, de verdad no se como realizar una subconsulta, si pudieran orientarme o ayudarme ya que no he leido que puedo utilizar DB::raw para utilizar en forma nativa sql pero no deseo hacer eso ya que no tendria flexibilidad al momento de cambiar de gestor de base de datos, deseo utilizar el ORM para hacer esta consulta, llevo 2 días investigando pero no encuentro una respuesta o articulo que me aclare el panorama o me lleve a una respuesta acertada, gracias de antemano.