Seguimos con los tutoriales de Yii. Hoy vamos a continuar con algo basico y siempre necesario, el acceso a datos y ABM(Alta Baja Modificacion).

Voy a evitar explicar cosas repetidas asi que por favor revisen los tutoriales y aprendan lo anterior para no tener problemas con este.

Voy a estar usando URLs amigables, que tambien ya se explico como conseguir en un articulo anterior.

Lo primero sera crear una base de datos de prueba con una tabla de pruebas:

[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]

Llenen la tabla con algunos datos de prueba. Por ej: datos de
prueba

Vamos a seguir usando la aplicacion de pruebas que creamos en el primer tutorial. O pueden crear una nueva si lo desean. Pero 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 ‘Usuarios’.

Acceso a datos

Acceso a datos es obtener los datos, para luego poder mostrarlos o trabajarlos de alguna forma. El comando que usaremos sera ‘find’, que es un metodo de la clase CActiveRecord y si han probado otros frameworks de php seguro lo han usado.

Vamos a crear un nuevo controller llamado ‘abm’ para hacer pruebas. Usen la herramienta Gii para crearlo.

Veamos primero como acceder a un solo registro usando la clave primaria(el id). El codigo es el siguiente:

[php] public function actionIndex(){ $modelo=Usuarios::model(); $registro=$modelo->findByPk(1);

$this->render(‘index’, array(‘registro’=>$registro)); } [/php]

La primera linea de la accion es para obtener el modelo y como veran es muy facil. Solo es el nombre del modelo seguido de “::model()”.

Y en la siguiente linea obtenemos el registro con clave primaria(id) igual a

  1. Pueden probar poniendo otros numeros.

En la vista vamos a mostrar todos los campos de ese registro:

[html] ID: id;?>

Nombre: nombre;?>

Direccion: direccion;?>

Email: email;?> [/html]

Como se daran cuenta, lo que se obtiene en la vista es un objeto y sus propiedades son los campos de la tabla, con el mismo nombre.

Aparte de findByPk tenemos otro metodos para obtener un registro como findByAttributes , findBySql o simplemente find. Pero calculo que el que mas usaran sera el de buscar por atributos.

Cambiemos el codigo de la accion index por este:

[php] $modelo = Usuarios::model(); $registro = $modelo->findByAttributes(array(‘nombre’=>‘Perro’)); $this->render(‘index’, array(‘registro’ => $registro)); [/php]

Como veran ahi pude buscar el registro que tenia por en el campo nombre la palabra ‘Perro’.

Cuando lo que necesitamos es extraer multiples registros(filas de la tabla) podemos usar otras variantes como:

  • findAll que trae todos los registos de tabla
  • findAllByAttributes que trae todos los que conincidan con la condicion espeficicada para el atributo
  • findAllBySql que trae los registros en base a una sentencia SQL

La principal diferencia de los ‘findAll’ es que devuelven un array de objetos de vez de solo un objeto. Y la manera mas normal de recorrer el array es usando un foreach.

Alta de registros

Gracias a las caracteristicas de ActiveRecord es muy facil crear nuevos registros. Primero creamos un nuevo objeto de la clase ‘Usuarios’ y asignamos valores a las propiedades de ese objeto. Y las propiedades son los campos de la tabla. Una vez asignado los valores guardamos el nuevo registro. En codigo seria asi:

[php] $nuevo = new Usuarios; $nuevo->nombre = ‘Otro nombre’; $nuevo->direccion = ‘Otra direccion’; $nuevo->email = ‘[email protected]’; $nuevo->save(); [/php]

Modificacion de datos

La modificacion de datos es igual a agregar nuevos datos. Solo que en vez de crear un nuevo objeto, debemos buscar cual es el que vamos a modificar usando el algunos de los ‘finds’. Por ejemplo, con este codigo modifico el nombre y direccion del registro con id igual a 1.

[php] $modelo=Usuarios::model(); $registro=$modelo->findByPk(1); $registro->nombre = ‘Nombre modificado’; $registro->direccion = ‘Direccion modificada’; $registro->save(); [/php]

Baja de registros

Si queremos borrar el registo con id igual a 2 hariamos algo asi:

[php] $modelo=Usuarios::model(); $modelo->deleteByPk(2); [/php]

O por ejemplo si queremos borrar todos los registros que tengan ‘Federico’ en el nombre hacemos algo asi:

[php] $modelo=Usuarios::model(); $modelo->deleteAll(“nombre = ‘Federico’"); [/php]

Espero que les haya gustado y les sirva este tutorial :)