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:
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.
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
;
$reporte = Evento::find()->joinWith(['campana','agencia']);
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');
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
Publicar un comentario