3.7.6.1 Types de relations

Les quatre types d'associations dans CakePHP sont : hasOne (a un seul), hasMany (a plusieurs), belongsTo (appartient à), et hasAndBelongsToMany (HABTM) (appartient à et est composé de plusieurs).

Relation Type d'association Exemple
un vers un hasOne Un utilisateur a un profil.
un vers plusieurs hasMany Les utilisateurs dans un système peuvent avoir plusieurs recettes.
appartient à belongsTo Une recette appartient à un utilisateur.
plusieurs vers plusieurs hasAndBelongsToMany Les recettes ont, et appartiennent à plusieurs tags.

Les associations se définissent en créant une variable de classe nommée comme l'association que vous souhaitez définir. La variable de classe peut quelquefois se limiter à une chaîne de caractère, mais peut également être un tableau multi-dimensionnel utilisé pour définir les spécificité de l'association.

<?php

class Utilisateur extends AppModel {
    var $name = 'Utilisateur';
    var $hasOne = 'Profil';
    var $hasMany = array(
        'Recette' => array(
            'className'  => 'Recette',
            'conditions' => 'Recette.acceptee = 1',
            'order'      => 'Recette.created DESC'
        )
    );
}

?>
  1. <?php
  2. class Utilisateur extends AppModel {
  3. var $name = 'Utilisateur';
  4. var $hasOne = 'Profil';
  5. var $hasMany = array(
  6. 'Recette' => array(
  7. 'className' => 'Recette',
  8. 'conditions' => 'Recette.acceptee = 1',
  9. 'order' => 'Recette.created DESC'
  10. )
  11. );
  12. }
  13. ?>

Dans l'exemple ci-dessus, la première instance du mot 'Recette' est ce que l'on appelle un 'Alias'. C'est un identifiant pour la relation et cela peut être ce que vous souhaitez. En règle générale, on choisit le même nom que la classe qu'il référence. Toutefois, les alias doivent être uniques à la fois dans un modèle et de part et d'autre d'une relation belongsTo/hasMany ou belongsTo/hasOne. Choisir des noms non-uniques pour des alias de modèle peut engendrer des comportements non souhaités.