Las uniones utilizando Active Record

Te mostraremos las diferentes formas de usar uniones o Joins con Active Record


Existen varias formas de hacer uniones en Yii2 con Active Record

Te muestro algunos Ejemplos:

joinWith

La forma más adecuada es a través de la unión mediante la declaración existente dentro del modelo. 

Ejemplos:


Unión mediante el modelo. 


Observa que el nombre del parámetro que está dentro del método joinWith() es el mismo nombre que encuentras en la relación que está declarada dentro del modelo.

Esta opción sólo se puede utilizar si existe una declaración dentro del modelo.


        $reporte = Evento::find()->joinWith('campana');




Ejemplo de declaración de relación dentro del modelo. Lo que aparece en la cabera del modelo como @property es el mismo nombre que puedes usar dentro del join



      ....
  * @property Campana $campana
    .....

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getCampana()
    {
        return $this->hasOne(Campana::className(), ['id' => 'campana_id']);
    }





Unión abreviada

Esta opción no es muy conocida, pero la puedes usar en los casos donde tengas más de una relación con la misma tabla.

Codigo MySQL



 select *
        from evento 
   left join campana on campana.id = evento.campana_id
   left join agencia on agencia.id = evento.agencia_id
;




Consulta Active Query. Este método sólo funciona si todas las uniones están dentro del mismo modelo.

Importante. Si la llave foranea no está declarada dentro del mismo modelo esta opción no funciona ya que toma como base las declaraciones de las relaciones dentro del modelo. 


 $reporte = Evento::find()->joinWith(['campana','agencia']);





leftJoin


Es cuando una relación podría estar o no, esto permite que se pueda realizar una unión condicional sin afectar la consulta en su conjunto. 

Es importante mencionar que para éste caso no es necesario que la relación esté declarada en el modelo.


Ejemplo SQL de jeft join



 SELECT `evento_usuario_respuestas`.* 
FROM `evento_usuario_respuestas` LEFT JOIN `pregunta` ON pregunta.id = evento_usuario_respuestas.pregunta_id


Equivalente en Yii2. Es importante mencionar que en este ejemplo no es necesario que exista una relación declarada dentro del modelo, es decir, el primer parámetro en esta consulta que sel llama "pregunta" no es un nombre de relación sino el nombre de la tabla. 


 EventoUsuarioRespuestas::find()
->leftJoin('pregunta','pregunta.id = evento_usuario_respuestas.pregunta_id');
















Fuentes:

Comentarios

Aprende Yii2


Lo más Visto

Tutorial de implementación de calendario de rango de fechas con Karkit en gridView

Guía rápida para uso de widget kartik para select para formulario

Cómo incluir una vista dentro de un modal

Google Plus desaparecerá el 4 de Abril de 2019

Crear fomulario HTML con checkbox sin Active Record

hostinger

ventana bienvenida