Se connecter

Informatique

Programmation

Sujet : [DQL] Ma requete marche mais je ne la comprends pas
1
karis
Niveau 11
20 mai 2023 à 16:59:58

Bonjour,

Je suis sur un projet symfony qui comporte entre autre une table barbershop, une table user, et une table barbershop_user_like avec barbershop_id et user.id qui me permet de référencer les barbershop likés par chaque user.

Pour récuperer les barbershop likés de chaque user j'ai fait cette requete DQL :

$qb->select('b')
->from('App\Entity\Barbershop', 'b')

->innerJoin('b.likes', 'user')

->where('user.id = :user')
->setParameter('user', $user)
->getQuery();

La ou je ne comprends pas c'est le inner join. Je ne comprends pas comment il fait le lien avec ma table user pour ensuite pouvoir spécifier que le user id doit être égal a : user.

Si quelqu'un peut m'expliquer :hap: Merci :)

Jisoo_ripabocou
Niveau 5
21 mai 2023 à 22:23:20

Le lien entre la table 'user' et la table 'barbershop' est établi via l'entité Barbershop qui contient une propriété 'likes' qui représente les utilisateurs qui ont aimé le barbershop. Cette propriété est probablement définie comme une relation ManyToMany avec l'entité User.

Lorsque vous exécutez la requête DQL que vous avez fournie, Doctrine effectue une jointure interne (INNER JOIN) entre la table 'barbershop' et la table 'barbershop_user_like' (qui représente la relation ManyToMany), puis une autre jointure interne entre la table 'barbershop_user_like' et la table 'user'. Cette jointure interne se fait automatiquement car Doctrine est capable de comprendre la relation entre les entités grâce à leurs annotations ou configurations.

Ensuite, la clause 'where' est utilisée pour filtrer les résultats en fonction de l'ID de l'utilisateur (specified by ':user'), qui est un paramètre lié à la requête à l'aide de la méthode 'setParameter'.

En résumé, Doctrine est capable de faire le lien entre les tables 'user' et 'barbershop' en utilisant les relations définies dans les entités, et il utilise la clause 'where' pour filtrer les résultats en fonction de l'utilisateur spécifié.

1
Sujet : [DQL] Ma requete marche mais je ne la comprends pas
   Retour haut de page
Consulter la version web de cette page