je te remercie Nautile car ça répond exactement à ma question ! J'en profite pour répondre à l'autre partie : le "PHPname" de ma table utilisateur est le même que le champ de la clé étrangére dans la table des news. C'est cela qui provoquait mon erreur ! J'en apprend tout les jours avec Symfony ^^
cordialement, On 25 juin, 09:31, nautilebleu <[EMAIL PROTECTED]> wrote: > 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 -~----------~----~----~----~------~----~------~--~---
