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.