Tu vas creer tes modèles pour toutes les tables de ta base de données, exemple :
Table "Users"
Champs :
id
username
password
Le modele sera donc une classe nommée "User", contenu dans un fichier User.php
Table "Profiles"
Champs :
id
user_id >> Voila une clé étrangére (ou sous-clée comme tu appel ça)
first_name
last_name
gender
Le modele sera donc une classe nommée "Profile", contenu dans un fichier Profile.php
Mais et mes liaisons alors ?
Et bien dans le modèle User, tu défini que l' "User" à un "Profile" en y inscrivant une relation "hasOne".
User >> hasOne >> Profile
(Utilisateur possède un et un seul profil)
Comme ceci :
public $hasOne = array('Profile');
Dans ton modele "Profile", tu peux définir qu'un profil appartient à un (et un seul) User. En faisant une relation "belongsTo" :
Profile >> belongsTo >> User
(Profil appartient à User)
Mais et pour ce qui est des Insert ? Update et Delete ? :O
C'est simple :
Pour l'insert / update : Une fois ta relation définie, tu pourras passer dans ton save "User" un tableau avec les données "Profile" qui seront save automatiquement.
Du genre :
Insert :
$this=>User->save(array(
'User' => array(
'username' => "Yuki",
'password' => 'pouet.'
),
'Profile' => array(
'first_name' => 'Yuki_firstname',
'last_name' => 'yuki_lastname',
'gender' => 'm'
)
));
Et .. Magie ! Cake se chargera d'assigner le bon user_id !
Pour ce qui est du delete, tu peux faire en sorte de supprimer les informations liés lors de la suppression du parent en ajoutant le parametre de configuration "dependent" dans tes relations hasOne et hasMany :
Pour reprendre l'exemple plus haut :
Dans mon fichier user.php :
public $hasOne = array(
'Profile' => array(
'dependent' => true
)
);
Ce qui provoquera la suppression du profil lors de la suppression de l'utilisateur rattaché :) !
Pour que le système marche, il faut bien évidemment respecter les conventions de nommage concernant la clé étrangère (sous-clé) qui prend la forme "nomdumodeleausingulier_id". Et voilaaaa !
Ici j'ai parlé uniquement de la liaison "hasOne", la liaison "hasMany" fonctionne "quasiment" pareil, à la différence que le modele parent peux avoir plusieurs enfants :
Post (Article) >> hasMany >> Comment (Commentaire)
Et la structure des données à save sera donc :
$this->Post->saveAll(array(
'Post' => array(
'title' => "1er article !"
),
'Comment' => array(
array(
'pseudo' => 'Yuki',
'comment' => "Firsttttt !"
),
array(
'pseudo' => 'Yuki's twin',
'comment' => "Chiotte, j'suis pas le premier."
)
)
));
Tu noteras l'utilisation de "saveAll" et non de "save" qui permet de save plusieurs enregistrement en même temps (Documentes toi sur saveAssociated et saveMany au passage, ça pourra t'être utile.)
Voilaaaaa !
J'espere que j'ai bien pigé la question parce que j'ai mis toute mon âme dans cette réponse 8D
Yuki~