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');
}
}
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:
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. 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