Los cuatro tipos de relaciones en CakePHP son: hasOne, hasMany, belongsTo y hasAndBelongsToMany(HABTM), “tiene un”, “tiene muchos”, “pertenece a” y “tiene y pertenece a muchos”, respectivamente.
Relación | Tipo de Asociación | Ejemplo |
---|---|---|
uno a uno | hasOne (“tiene un”) | Una usuario tiene un perfil. |
uno a muchos | hasMany (“tiene muchos”) | Un usuario puede tener múltiples entradas. |
muchos a uno | belongsTo (“pertenece a”) | Muchas entradas pertenecen a un usuario. |
muchos a muchos | hasAndBelongsToMany (“tiene y pertenece a muchos”) | Las entradas tienen, y pertenecen a, muchas etiquetas. |
Ejemplos:
class Usuario extends AppModel { var $name = 'Usuario'; var $hasOne = 'Perfil'; }
class Perfil extends AppModel { var $name = 'Perfil'; var $belongsTo = 'Usuario'; }
Específico:
class Perfil extends AppModel { var $name = 'Perfil'; var $belongsTo = array( 'Usuario' => array( 'className' => 'Usuario', 'foreignKey' => 'usuario_id' ) ); }
class Usuario extends AppModel { var $name = 'Usuario'; var $hasMany = 'Comentario'; }
Específica:
class Usuario extends AppModel { var $name = 'Usuario'; var $hasMany = array( 'Comentario' => array( 'className' => 'Comentario', 'foreignKey' => 'usuario_id', 'conditions' => array('Comentario.estado' => '1'), 'order' => 'Comentario.created DESC', 'limit' => '5', 'dependent'=> true ) ); }
class Receta extends AppModel { var $name = 'Receta'; var $hasAndBelongsToMany = array( 'Etiqueta' => array('className' => 'Etiqueta', 'joinTable' => 'etiquetas_recetas', 'foreignKey' => 'receta_id', 'associationForeignKey' => 'etiqueta_id', 'with' => '', 'conditions' => '', 'order' => '', 'limit' => '', 'unique' => true, 'finderQuery' => '', 'deleteQuery' => '', 'insertQuery' => '' ) ); }