Salut, Une erreur courant lorsqu'on débute avec Propel est qu'il y a deux endroits où des jointures peuvent être définies, selon que l'on veuille hydrater le résultat avec les valeurs de la table jointe ou non.
Si tu veux restreindre une liste de résultats selon les valeurs d'une autre table (par exemple, tous les utilisateurs de l'organisation X) mais que tu n'as pas besoin d'afficher des infos sur cette organisation, tu vas faire: $c = new Criteria(); $c->addJoin(OrganizationPeer::ID, UserPeer::ORGANIZATION_ID) ; $c->add(OrganizationPeer::ID, $id) ; $users = UserPeer::doSelect($c) ; Ce requête va faire une jointure complète. Tu peux obtenir une jointure gauche en faisant: $c = new Criteria(); $c->addJoin(OrganizationPeer::ID, UserPeer::ORGANIZATION_ID, Criteria::LEFT_JOIN) ; $c->add(OrganizationPeer::ID, $id) ; $users = UserPeer::doSelect($c) ; Si maintenant tu veux obtenir des infos sur les organisations de tes utilisateurs (indépendamment d'un filtrage sur l'organisation) sans avoir à faire une requête supplémentaire par utilisateur, tu dois faire un criteria du type: $c = new Criteria(); $users = UserPeer::doSelectJoinOrganization($c) ; Ce faisant, l'objet User sera hydraté avec l'objet Organization et tu pourras faire un foreach en une seule requête. Il est bien sûr possible de combiner les deux pour filtrer les utilisateurs qui n'ont pas d'organisation (ou dans ton cas pour trouver les articles sans auteurs) Nautile On 23 juin, 11:06, simon <[EMAIL PROTECTED]> wrote: > Merci de ta réponse. > C'est vrai que pour ce cas utiliser un utilisateur générique est > possible mais j'aimerai savoir si justement il est possible d'utiliser > des left join avec un pager et surtout : Pourquoi j'ai une erreur > lorsque je veux utiliser la méthode "doSelect" > avec un clé étrangére dans la table. > merci ! > > On 22 juin, 18:57, "Olivier BALAIS" <[EMAIL PROTECTED]> > wrote: > > > Bonjour, > > > Plutôt que de mettre la clé étrangère à nul j'aurai créé un utilisateur > > factice qui prend en charge les news qui n'ont plus d'auteurs. Un peu comme > > l'utilisateur anonyme/invité dans beaucoup d'applis Web. > > En tous les cas cela réglerai une partie de ton problème sans avoir à > > changer ta base > > > -----Message d'origine----- > > De : [email protected] [mailto:[EMAIL PROTECTED] De la > > part de simon > > Envoyé : vendredi 22 juin 2007 17:28 > > À : Symfony-fr > > Objet : [symfony-fr] sfPropelPager et LEFT JOIN > > > Bonjour, > > > Mon problème concerne un système de news. > > Voila j'ai une table avec des news et une clé étrangére pointant vers > > un utilisateur (d'une autre table) > > A la suppression d'un utilisateur, cet clé étrangére est mise à NULL. > > > Je cherche à afficher les news avec sfPropelPager et un code très > > similaire a celui trouvé dans Askeet. > > Le problème est que si je laisse la méthode ($pager->setPeerMethod) à > > "doSelect" il me dit qu'il ne veut pas redéfinir une méthode : > > > Fatal error: Cannot redeclare BaseNews::setUtilisateur() in /home/ > > simon/projet/www/lib/model/om/BaseNews.php on line 481 > > > Et si j'utilise "DoSelectJoinUtilisateur" il ne m'affiche plus les > > news ou la clé étrangére est NULL. > > > Je cherche donc à faire un LEFT JOIN afin de retenir toutes les news > > et les utilisateurs si nécessaire. Seulement je ne sait pas si cela > > est possible. (il n'y a pas de méthode peer du style > > "doSelectLeftJoinUtilisateur" et si j'ajoute un "left join" sur > > l'objet Criteria du pager ça ne change rien ) > > > dois-je changer ma base ou y-a-t'il une solution ? > > > Merci de vos réponses ! :) --~--~---------~--~----~------------~-------~--~----~ Vous avez reçu ce message, car vous êtes abonné au groupe Groupe "Symfony-fr" de Google Groupes. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement à ce groupe, envoyez un e-mail à l'adresse [EMAIL PROTECTED] Pour afficher d'autres options, visitez ce groupe à l'adresse http://groups.google.com/group/symfony-fr?hl=fr -~----------~----~----~----~------~----~------~--~---
