2.4.2 Conventions pour les Modèles
Les noms de classe de modèle sont au singulier et CamelCased. "Personne", "GrossePersonne" et "VraimentGrossePersonne" en sont des exemples.
Les noms de tables correspondant aux modèles CakePHP sont au pluriel et utilisent le caractère souligné (underscore). Les tables correspondant aux modèles mentionnés ci-dessus seront donc respectivement : "personnes", "grosse_personnes" et "vraiment_grosse_personnes".
Note des traducteurs francophones : seul le dernier mot est au pluriel et tous les pluriels français ne seront pas compris par CakePHP sans lui indiquer précisément (par exemple cheval/chevaux). Voir pour cela le chapitre sur les inflexions.
Les clés étrangères des relations hasMany, belongsTo ou hasOne sont reconnues par défaut grâce au nom (singulier) du modèle associé, suivi de "_id". Donc, si "un cuisinier hasMany cakes", la table "cakes" se référera à un cuisinier de la table "cuisiniers" via une clé étrangère "cuisinier_id".
Les tables de jointure utilisées dans les relations hasAndBelongsToMany (HABTM) entre modèles devraient être nommées d'après le nom des tables des modèles qu'elles unissent, dans l'ordre alphabétique ("pommes_zebres" plutôt que "zebres_pommes").
Toutes les tables avec lesquelles les modèles de CakePHP interagissent (à l'exception des tables de jointure), nécessitent une clé primaire simple pour identifier chaque ligne de manière unique. Si vous souhaitez modéliser une table qui n'a pas de clé primaire sur un seul champ, comme les lignes de votre table de jointure "posts_tags", la convention de CakePHP veut qu'une clé primaire sur un seul champs soit ajoutée à la table.
CakePHP n'accepte pas les clés primaires composées. Dans l'éventualité où vous voulez manipuler directement les données de votre table de jointure, cela veut dire que vous devez soit utiliser les appels directs à query, soit ajouter une clé primaire pour être en mesure d'agir sur elle comme un modèle normal. Exemple :
CREATE TABLE posts_tags ( id INT(10) NOT NULL AUTO_INCREMENT, post_id INT(10) NOT NULL, tag_id INT(10) NOT NULL, PRIMARY KEY(id));
