IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ORM PHP Discussion :

Doctrine : inner join sans relations (alias)


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Par défaut Doctrine : inner join sans relations (alias)
    Bonjour,

    existe-til un moyen d'effectuer une query doctrine avec un innerjoin en utilisant une DB non relationelle?

    Chaque fois que j'utilise ->innerJoin() j'ai une erreur me disant que l'alias n'existe pas.
    le problème c'est que je n'ai pas de relations dans maon schemas.yml (car ce n'ets pas une db relationnelle), j'aimerai donc pouvoir définir le join dans ma query.

    Est-ce possible?

    merci

  2. #2
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Bonjour,

    Tu peux toujours faire du DQL en écrivant ta requête complète (cf doc)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Par défaut
    Salut,

    oui si je ne trouve pas de solution je passerai par cette méthode.

    le seul truc qui est moins bien avec cette façon de faire c'est que c'est moins secure (pour les sql injection par exemple).
    ici j'utilise ce type de synthaxe pour spécifier des valeures : Si j'écrit la requête complète directement existe-t-il un moyen d'assurer un niveau de protection comme c'est le cas avec le remplacement d'un ? par une variable (comme dans l'exemple ci dessus)?

  4. #4
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Citation Envoyé par Lopimp Voir le message
    Si j'écrit la requête complète directement existe-t-il un moyen d'assurer un niveau de protection comme c'est le cas avec le remplacement d'un ? par une variable (comme dans l'exemple ci dessus)?
    Bonne question, je ne saurai te répondre. Regarde du côté de la librairie Doctrine et du code de where() pour te donner une idée.

    Sinon, je n'arrive pas à comprendre. Tu fais un where() mais un leftJoin() ne fonctionne pas ? Quelle est l'erreur affichée ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Par défaut
    voici l'erreur que j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    500 | Internal Server Error | Doctrine_Table_Exception
    Unknown relation alias
    et voici la query que j'essaye d'exécuter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    return Doctrine_Query::create()
                        ->select("s.*,t.*")
                        ->from("Sac s")
                        ->innerJoin('Type t ON t.id_type = s.id_type')
                        ->where("s.name=?",$name)
                        ->groupby("s.name")
                        ->execute();
    le problème ici c'est que j'essaye de faire ma query sans utiliser d'alias vu que je n'en ai pas (ma DB n'est pas relationnelleil n'y a donc pas de connections dans mon fichier shemas.yml)

    j'ai essayé pas mal de synthaxe différentes dans ma query, mais à chaque fois il me dit qu'il ne trouve pas l'alias, comme si il fallait obligatoirement fournir un alias.

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Comment peux-tu utiliser une base de données non relationnel avec Doctrine, toutes les bases qu'ils utilisent sont des SGBDR donc si tu utilises Doctrine, ta base EST relationnel.

    Donc, autre possibilité, tu utilises une base de donnée relationnel déjà existante dans la quel la partie relationnel n'est pas déclarée.

    Dans ce deuxième cas, tu peux parfaitement les définires dans ton schema.yml et les utiliser, tant que tu n'injecte pas le SQL, tu ne modifieras que tes objets model qui n'impactent pas ta base. Tu vas y perdre quelques contraintes au niveau de la base, mais elle seront reprises au niveaux du modèle.

    Si non, je serais bien curieux de connaître quel base de données tu utilises. Pour rajouter un lien, ta requête devient.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    return Doctrine_Query::create()
                        ->select("s.*,t.*")
                        ->from("Sac s, Type t")
                        ->where("s.name=?",$name)
                        ->andWhere(s.id = t.sac_id)
                        ->groupby("s.name")
                        ->execute();
    j'ai mis le sens de la relation (andWhere) au hasard, il faudrait donc affiner.

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/07/2011, 23h39
  2. [Doctrine] Erreur : "Unknown relation alias"
    Par lordlifen dans le forum ORM
    Réponses: 7
    Dernier message: 18/10/2010, 10h48
  3. Doctrine : inner join
    Par dolu02 dans le forum ORM
    Réponses: 5
    Dernier message: 18/08/2010, 09h55
  4. [MySQL] [Doctrine] Jointure sans relation
    Par Cladjidane dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/09/2009, 06h41
  5. requete sur plusieurs tables sans inner join?
    Par polo86 dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/04/2009, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo