Tipos de Relaciones

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

Publicado por

Avatar del usuario

Juan Pablo Fuentes

Formador de programación y bases de datos