Ejercicio 1. Base de datos con relación de tipo muchos a muchos. Andamiaje.

En este ejercicio trabajamos con una base de datos muy sencilla que tiene sólo dos tablas -articulos y clientes- entre las que se establece una relación de tipo muchos a muchos; se inspira en este ejercicio para Access de www.superalumnos.net. Se utiliza la técnica del andamiaje para comprobar el correcto funcionamiento y para insertar algunos datos de prueba.

Objetivos

1. Conocer el funcionamiento de las relaciones de tipo muchos a muchos en CakePHP y las convenciones que hay que utilizar para trabajar con ellas.

2. Utilizar la técnica del scaffolding para comprobar el correcto funcionamiento de la recién implementada base de datos.

Notas

Se utiliza la primera instalación de CakePHP y no se cambia el nombre de la carpeta c:\wamp\www\discografia

Resolución

Arrancamos el monitor MySQL, creamos la base de datos pedidos y las tablas clientes, articulos y articulos_clientes:

create table clientes (
id int unsigned auto_increment,
nombre varchar(50) not null,
telefono varchar(9) not null,
primary key (id) );
 
create table articulos (
id int unsigned auto_increment,
descripcion varchar(50) not null,
pvp decimal(4,2) null,
primary key (id) );
 
create table articulos_clientes (
id int unsigned auto_increment,
articulo_id int unsigned not null,
cliente_id int unsigned not null,
primary key (id) );

Configuramos el archivo database.php para que CakePHP se pueda conectar a la base de datos que acabamos de crear:

class DATABASE_CONFIG {
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'pedidos',
'prefix' => '',
);
var $test = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'pedidos',
'prefix' => '',
);
}

Los modelos y controladores para los clientes y los artículos son estos:

<?php
class Cliente extends AppModel{
        var $name = 'Cliente';      
}
?>
<?php
class Articulo extends AppModel{
        var $name = 'Articulo';
        var $hasAndBelongsToMany = array('Cliente'=>array('className'=>'Cliente'));
}
?>
 
<?php 
class ClientesController extends AppController{ 
      var $name = 'Clientes';
      var $scaffold; 
?>
<?php 
class ArticulosController extends AppController{ 
      var $name = 'Articulos';
      var $scaffold; 
?>

 

Conclusiones

 

1. Para asociar las tablas clientes y pedidos necesitamos una tabla de unión HABTM (hasAndBelongsToMany), cuyo nombre debe seguir esta convención: se escribe el nombre de la primera tabla, un guión bajo, y el nombre de la segunda tabla, en orden alfabético. En nuestro ejemplo, como tenemos las tablas articulos y clientes, el nombre de la tabla de unión debe ser articulos_clientes.

 

2. Para definir la relación entre las dos tablas debemos añadir un array en el modelo Articulo.

 

3. Utilizamos la característica del andamiaje de CakePHP para comprobar el funcionamiento del esquema de la base de datos: estamos en la primera etapa del proyecto, en que se pueden producir cambios en el diseño.

 

Anuncios

Una respuesta

  1. Excelente blog, muchas gracias por compartir tus conocimientos.!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: