Asociacion HABTM

Una de las características mas destacadas de cake son las asociaciones en particular la de Has And Belongs To Many o muchos a muchos, que en muchas ocasiones nos sera de gran utilidad pero algunas veces nos dará algunos dolores de cabeza, a continuación tratare de redactar los problemas mas comunes relacionados con esta asociación.

Vamos a utilizar el siguiente ejemplo, supongamos que tenemos una tabla de usuarios y otra llamada vehículos, la asociación en sera que un vehículo tiene y pertenece a muchos usuarios y un usuario tiene y pertenece a muchos vehículos entonces crearemos otra tabla llamada usuarios_vehiculos, con los campos usuario_id y vehiculo_id.

// app/models/usuario.php
class Usuario extends AppModel {
 
    var $hasAndBelongsToMany = array('Vehiculo');
}
// app/models/vehiculo.php
class Vehiculo extends AppModel {
 
    var $hasAndBelongsToMany = array('Usuario');
}

En este punto ya tenemos listas las asociaciones para ser utilizadas, ya que para la tabla extra que creamos no es necesario crear el modelo ya que utiliza “on the fly” , pero si desean ahorrarse unos cuantos dolores de cabeza como lo hice yo, les recomiendo amplia mente crear el modelo de la tabla en cuestión y asignarle las asociaciones respectivas.

// app/models/usuarios_vehiculo.php
class UsuariosVehiculo extends AppModel {
 
    var $belongsTo = array('Usuario', 'Vehiculo');
}

Con el modelo creado ahora solo es cuestión de crear el controlador como se hace normalmente y empezar a codificar nuestras acciones, como les comenté si desean ahorrarse unos cuantos dolores de cabeza lo recomendable seria hacerlo de esta manera.

3 Comentarios to “Asociacion HABTM”

  1. Robert  on Agosto 3rd, 2009

    Podrias mostrar un ejemplo practico creando un modelo de una tabla con 2 nombres algo así “partidas_materiales”

  2. gomflo  on Agosto 21st, 2009

    Pues me imagino que en realidad no cambiaria mucho mas que los nombres, algo asi como:

    // partida.php
    var $hasAndBelongsToMany = array(’Material’);

    // material.php
    var $hasAndBelongsToMany = array(’Partida’);

  3. Ariel Iván Ruiz Mateos  on Enero 27th, 2010

    El framework deberia ser capaz de manejar esta relacion de muchos a muchos sin necesidad de crear una clase (UsuariosVehiculo) del modelo para la tabla de la relacion.

    Por que recomienda “ampliamente” hacer esto? Me parece que no es correcto desde el punto de vista del modelo de objetos.


Dejar un comentario