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/>"; } ?>
Más información:
http://www.yiiframework.com/doc/guide/1.1/es/database.overview