Bonjour,
Je débute dans l'utilisation d'un framework et je me retrouves confronté à un problème majeur pour la conception de mon mini réseau social.
J'avais commencé ce projet en le développant sans framework et j'avais réussi à me débrouiller pour retourner les résultats que j'attendais avec des requêtes SQL, mais là je vous avoue être perdu. J'ai beau regarder la documentation, re voir le tutoriel de Grafikart rien n'y fait. J'ai pas du assimiller la bonne logique.
Je vais maintenant vous expliquez mon problème et les relations que j'envisage de faire:
Mon but est lorsqu'on va sur un profil de récupérer les publications associés au profil, les commentaires ainsi que l'auteur du commentaire associés à la publication, les likes ainsi que l'auteur du like associés à la publication et enfin si l'auteur de la publication à spécifié des photos où une vidéo récupérer ces élements associés à la publication.
une table users (id, email, password, rank, created)
une table profiles (id, user_id, name, mission, avatar, background) * user_id fait référence à ID de la table users.
une table publications (id, profile_id, sender_id, message, created) * profile_id correspond à l'ID du profile dans lequel on publie et sender_id correspond à user_id de la table profiles pour récupérer l'utilisateur qui poste cette publication dans le profile X.
une table comments (id, ref_id, ref, user_id, message, created) * ref_id *correspond soit à l'ID d'une publication, une photo ou une vidéo, ref** au type exemple 'Publication', 'Movie', 'Picture' pour faire une table commentaire généralisé et * user_id correspond à l'auteur du commentaire associé à l'user_id de la table profiles pour pouvoir récuperer son nom et avatar.
une table likes (id, ref_id, ref, user_id, created) * ref_id *correspond soit à l'ID d'une publication, une photo ou une vidéo, ref au type exemple 'Publication', 'Movie', 'Picture' pour faire une table likes généralisé et * user_id** correspond à l'auteur du like associé à l'user_id de la tables profiles pour pouvoir récuperer son nom et avatar.
Pour le moment je m'attarde pas sur le système de photos et vidéo qui auront des commentaires et likes propre à leur id.
Au niveau des relations je vois ceci:
Honnêtement j'ai essayé ce modèle qui m'a l'air logique dans mon sens mais apparament CakePHP et moi n'avons pas la même logique!
J'espère que vous pourrez me venir en aide!
Merci,
Jordan
Bonjour.
Tu te trompes effectivement sur 1 point.
L'association hasOne, car en effet un commentaire et un like n'appartiennent qu'à un seul profil, mais un profil peut avoir plusieurs commentaires et plusieurs likes, il ne te faut pas oublier de le préciser dans les modèles Comment et Like.
Dans les tutoriels qu'à fait Grafikart concernant CakePHP, dans la formation, il a fait un TP concernant un petit site communautaire, que tu trouveras ici, tu devrais la regarder, ça devrait t'aider pour ton projet.
Bonjour,
En effet je te remercie, je vais coupler le filtrage avec le behavior containable pour affiner mes recherches.
Merci beaucoup !
Hello, je suis en train de coder un petit projet sur le modèle "blog communautaire et social". J' y ai intégré les commentaires (pas encore les like) et une fonction follow qui reste à améliorer, mais en gros sur un profil ça donne ça. Je veux bien te donner les relations que j'ai intégrées à mes models. Ca n'ajoutera rien à ce qu'a dit Lartak plus haut mais voilà ce que donne un profil => http://entrepreneo.fr/profil/1
Pour les associations des models "User" et "Comment" j'ai :
Pour toi qui a lié les commentaires au profil, je pense qu'il te suffit de faire
Et ça suffit, pas besoin de la liaison hasOne, tu peux retrouver tous les likes et les commentaires d'un profil, de la même façon que tu retrouve les publications d'un profil avec ton Profil hasMany Publication (désolé pour le singulier mais je parle en cakePhp2 :) )
Salut,
Merci de ton aide, toutefois j'ai résolu mon problème j'ai enfin compris ces fichus associations et sa logique :p !
Je donne mes liaisons si sa peut aider quelqu'un dans le futur et qu'il cherché despérement comme moi des exemples sur le web voici dont:
Model User:
public $hasOne = array(
'Profile' => array(
'foreignKey' => 'user_id',
'dependent' => true,
//'recursive' => 1
)
);
Model Profile:
public $hasMany = array(
'Publication' => array(
'dependent' => true
));
Model Publication:
public $belongsTo = array('Profile');
public $hasMany = array('Comment' => array('dependent' => true), 'Like' => array('dependent' => true));
Model Comment:
// Un commentaire peut appartenir a une publication, un profil et une photo
public $belongsTo = array('Publication', 'Profile', 'Picture');
et pour terminer le Model Like:
public $belongsTo = array(
'Publication' => array('foreignKey' => 'ref_id',
'counterCache' => array(
'like_count' => array('Like.value' => 1),
'unlike_count' => array('Like.value' => -1)
)),
'Profile');
Si au cas où vous avez des suggestions à faire pour améliorer mes associations je suis prenneur! Toutefois sa marche très bien pour le moment :).