Seguimos avanzando con la parte basica de Yii con estos tutoriales. Hoy vamos a ver como conectarse a una base de datos , como usar los modelos y un ejemplo sencillo de como visualizar los datos almacenados.
Hay que aclarar que una vez establecido los datos de acceso a los datos, se pueden obtener y manipular sin usar controladores. La principal ventaja de usarlos es que podemos aprovechar el patron de Active Record.
Para quien no lo conozca, Active Record es un patron en el que basicamente un objeto es un registro(renglon) de la tabla. Y encapsula(facilita) las tareas mas comunes de CRUD(Create Read Update Delete). En este patron las columnas de la tabla son representadas con propiedades de la clase.
En la web encontraran mucho mas info sobre eso. Pero ‘yo’ lo entiendo asi: “es manejar las filas de las tablas como si fueran objetos”.
Una vez entendido ese poquito de teoria, vamos a lo practico…
Los datos de prueba
Primero por supuesto necesitamos una base de datos y una tabla para probar todo lo que vamos a hacer. Vamos a crear una tabla llamada usuarios con este script:
[sql] CREATE TABLE IF NOT EXISTS usuarios
( id
int(11) NOT NULL
AUTO_INCREMENT, nombre
varchar(60) NOT NULL, direccion
varchar(200) NOT
NULL, email
varchar(50) NOT NULL, PRIMARY KEY (id
) ) ENGINE=InnoDB DEFAULT
CHARSET=utf8 AUTO_INCREMENT=1 ; [/sql]
Y la llenan con algunos datos de prueba.
Como conectarse a la base de datos
Suponiendo que vieron las primeras partes de los tutoriales de Yii que escribi, vamos a seguir trabajando con la aplicacion de prueba. En la carpeta protected->config deben abrir el archivo main.php
En ese archivo encontraran una parte que dice algo asi:
[php] ‘db’=>array( ‘connectionString’ => ‘sqlite:'.dirname(FILE).'/../data/testdrive.db’, ), [/php]
Eso es una configuracion para una conexion a una base de datos sqlite. Vamos a comentar eso y descomentar la parte que esa justo debajo. Dejandola mas o menos asi:
[php] ‘db’=>array( ‘connectionString’ => ‘mysql:host=localhost;dbname=pruebas_yii’, ‘emulatePrepare’ => true, ‘username’ => ‘root’, ‘password’ => ‘lalala’, ‘charset’ => ‘utf8’, ), [/php]
Creo que se entiende bastante bien donde va el nombre del host, la base de datos, el usuario y el password verdad? Ya esta! :P con eso ya podrian conectarse y hacer las operaciones basicas.
Como crear un modelo
Un modelo que permita usar el patron Active Record nos facilitara mucho el trabajo. Para crearlo no lo vamos a hacer con codigo, vamos a usar Gii. Vimos antes como crear controladores y vistas usando Gii. Ahora, entrando a la misma direccion: http://localhost/testyii/index.php?r=gii vamos a crear un modelo. En el formulario solo debemos colocar el nombre de la tabla.
El nombre del modelo se autocompleta. Incluso podriamos usar un asterisco para que se creen modelos para todas las tablas de la base de datos. Lo cual me parece genial porque podria ahorrar mucho tiempo de escribir codigo.
Le vamos click a “Preview” y nos avisara que archivos va a crear. Luego le damos click a “Generate” para generarlos.
El modelo generado pueden verlo en protected->models y el nombre del archivo es el mismo que el de la tabla. No lo vamos a analizar ahora a lo que se crea, pero pueden ver un poco el codigo para ir familiarizandose con el.
Acceder a los datos
Como dije al principio: a los datos se puede acceder con o sin modelo e incluso hay varias maneras de hacerlo. Vamos a ver una manera sencilla de hacerlo. Vamos a crear un controlador llamado ‘mostrar’ con una accion ‘index’ y su correspondiente vista(imagino que ya sabran como hacerlo).
Este sera el contenido de la accion:
[php] public function actionIndex() { //obtener el modelo, usar el nombre y ::model() $mi_modelo=Usuarios::model(); //obtener todos los registros de la tabla $mis_registros=$mi_modelo->findAll(); //envio los datos a la vista $this->render(‘index’,array(‘mis_registros’=>$mis_registros)); } [/php]
Todo esta claramente exlicado en los comentarios y no es nada dificil de entender.
En la vista tendremos esto:
[php]
id;?> | nombre;?> | direccion;?> | email;?> |
---|
[/php]
Una simple tabla para mostrar los resultados. Como veran se hace un foreach para obtener todos los objetos(registros) y las propiedades de esos objetos son las columnas de la tabla.
Al final deberia quedarles algo asi cuando acceden a http://localhost/testyii/index.php?r=mostrar
Verdad que estuvo facil? Nos vemos en el proximo tutorial :)