Yii – Base de datos y modelos

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:

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 ;

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:

'db'=>array(
	'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
),

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:

'db'=>array(
	'connectionString' => 'mysql:host=localhost;dbname=pruebas_yii',
	'emulatePrepare' => true,
	'username' => 'root',
	'password' => 'lalala',
	'charset' => 'utf8',
),

Creo que se entiende bastante bien donde va el nombre del host, la base de datos, el usuario y el password verdad?
Ya esta! 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.

modelos gii

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:

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));
}

Todo esta claramente exlicado en los comentarios y no es nada dificil de entender.

En la vista tendremos esto:

<table border="1">
	<?php foreach($mis_registros as $registro):?>
	<tr>
		<td><?php echo $registro->id;?></td>
		<td><?php echo $registro->nombre;?></td>
		<td><?php echo $registro->direccion;?></td>
		<td><?php echo $registro->email;?></td>
	</tr>
	<?php endforeach;?>
</table>

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
ejemplo yii

Verdad que estuvo facil? Nos vemos en el proximo tutorial

perro

Ingeniero en Informática. Programador en PHP y Angular. Lo que mas adoro en el mundo es el conocimiento. Y el anime....y Japón...y el running...y bloguear claro y algunas otras cientos de cosas. Sigo buscando la manera de hacer mi primer millón.

4
Comenta!

avatar
trackback

[…] la cuestion es que vamos a suponer que se llama ‘testyii’. En esa aplicacion vamos a crear un modelo usando Gii para la tabla usuarios. Y por supuesto el nombre del modelo sera […]

trackback

[…] la cuestion es que vamos a suponer que se llama ‘testyii’. En esa aplicacion vamos a crear un modelo usando Gii para la tabla usuarios. Y por supuesto el nombre del modelo sera […]

trackback

[…] la cuestion es que vamos a suponer que se llama ‘testyii’. En esa aplicacion vamos a crear un modelo usando Gii para la tabla usuarios. Y por supuesto el nombre del modelo sera […]

Javier
Javier

Gracias por los manuales, me han sido de gran ayuda!, pero tengo una duda sobre el acceso a los datos… ¿Como puedo restringir el acceso a los datos de las paginas para usuarios registrados?
Saludos!