Modelos en Yii Framework

Hay dos tipos de modelos en Yii Framework, los modelos de interacción con la base de datos y los modelos de formulario. Vamos a ver el primer tipo de modelo.

Lo ideal como en todos los frameworks es utilizar de forma estricta el ORM que estos incluyen, en el caso de Yii Active Record, de forma que cada modelo que creamos represente a una tabla de la base de datos y tenga tantos atributos y métodos setters y getters como columnas tiene la tabla.
Así alcanzamos el máximo nivel de abstracción y nos olvidamos de escribir consultas SQL,etc.
Personalmente esto me limita mucho a la hora de trabajar con relaciones entre tablas entre otras cosas.

Por eso en lugar de utilizar un ORM de forma estricta, prefiero utilizar un Query Builder(capa de abstracción) que estos tienen en métodos aislados dentro de los modelos o en su defecto utilizar consultas SQL tradicionales.

Veamos como crear un modelo. Hay que crear un fichero con el nombre de la tabla a la que representa por ejemplo protected/models/Usuarios.php

Ejemplo utilizando Active Record:

<?php
class Usuarios extends CActiveRecord{
    //Heredar del modelo	  
    public static function model($className=__CLASS__){
		return parent::model($className);
    }

}
?>

El controlador:

public function actionUsuarios(){
      $usuarios=new Usuarios();
							//Sacar todos los registros de la tabla
      $getUsuarios=$usuarios->findAll();
     
	 $this->render('usuarios',array(
                    "usuarios"=>$getUsuarios
                   ));
}

Vista:

<?php
foreach ($usuarios as $usuario) {
    echo $usuario["nombre"]." - ";
    echo $usuario["apellido"]." - ";
    echo $usuario["email"]."<br/>";
}
?>

Ejemplo aislando la lógica con la base de datos en el modelo:

<?php
class Usuarios extends CActiveRecord{
    private $connection;
    private $getUsuarios;
    
    public function __construct(){
        //Lanzamos la conexión a la base de datos
        $this->connection=new CDbConnection(
                //Cogemos la configuración asignada en config/main.php
                Yii::app()->db->connectionString,
                Yii::app()->db->username,
                Yii::app()->db->password
                );
        
        //Activamos la conexión
        $this->connection->active=true;
        
        //Esto nos permite utilizar el Query Builder y las consultas normales
    }
    
    //Heredamos del modelo
    public static function model($className=__CLASS__){
		return parent::model($className);
    }
    
    public function getUsuarios(){
       /* Consulta SQL tradicional
        * $sql="select * from usuarios;";
        * $this->getUsuarios=$this->connection->createCommand($sql)->queryAll();
        */
        
        //Query Builder 
        $this->getUsuarios=$this->connection->createCommand()
                ->select("*")->from('usuarios')->queryAll();
        return $this->getUsuarios;
    }
}
?>

El controlador:

public function actionUsuarios(){
      $usuarios=new Usuarios();
							//Sacar todos los registros de la tabla
      $getUsuarios=$usuarios->getUsuarios();
     
	 $this->render('usuarios',array(
                    "usuarios"=>$getUsuarios
                   ));
}

Vista:

<?php
foreach ($usuarios as $usuario) {
    echo $usuario["nombre"]." - ";
    echo $usuario["apellido"]." - ";
    echo $usuario["email"]."<br/>";
}
?>

En ambos casos imprimirá:
modelos en yii framework

Más información:
http://www.yiiframework.com/doc/guide/1.1/es/database.overview

Víctor Robles WEB

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post