Décrivez ici votre problème ou ce que vous cherchez à faire.

SELECT * FROM messages WHERE (sender='$membre' AND receiver='$user') OR (receiver='$membre' AND sender='$user')

Bonjour à tous, svp je galère à écrire une requête SQL de ce type avec Doctrine ODM.
J'ai utilisé querybuilder mais le résultat attendu n'est pas le bon.
Pouvez-vous m'aider svp.

L'objectif est de trouver les messages d'un utilisateur et de son conrrespondant depuis un tchat

4 réponses


kasalitech
Réponse acceptée

Bonjour,

Essayez ca :

$dm = $this->get('doctrine_mongodb')->getManager(); // Récupérez le gestionnaire de documents

$builder = $dm->createQueryBuilder(Message::class); // Utilisez le QueryBuilder pour l'entité Message

$membre = 'valeur_de_membre';
$user = 'valeur_de_user';

$query = $builder->field('sender')->equals($membre)
->field('receiver')->equals($user)
->addOr($builder->expr()->field('receiver')->equals($membre)->field('sender')->equals($user))
->getQuery();

$messages = $query->execute();

Assurez-vous de remplacer 'valeur_de_membre' et 'valeur_de_user' par les valeurs réelles que vous souhaitez utiliser dans votre requête.

Lle QueryBuilder de Doctrine ODM est équivalente à celle que vous avez fournie en SQL. Les méthodes field, equals et addOr pour construire la condition avec les opérations logiques nécessaires.

Bonjour Guilfred,

En regardant la documentation de Doctrine (cf : https://www.doctrine-project.org/projects/doctrine-orm/en/2.15/reference/dql-doctrine-query-language.html), j'ai pu voir ce genre d'exemple :

$query = $em->createQuery('SELECT u FROM ForumUser u WHERE (u.username = :name OR u.username = :name2) AND u.id = :id');
$query->setParameters([
    'name' => 'Bob',
    'name2' => 'Alice',
    'id' => 321,
]);
$users = $query->getResult(); // array of ForumUser objects

Dans ton cas tu aurais à recopier la requête, et bien définir les paramètres dans le setParameters() (tout cela pour des questions de sécurités). Je te laisse aller voir cette vidéo de Grafikart à ce sujet : https://grafikart.fr/tutoriels/securite-injections-sql-59 .

Edit: La vidéo est un peu veille, mais elle explique grandement le principe.

guilfred
Auteur

Bonjour Azorgh,

En fait ce que tu viens d'envoyer concerne les requêtes doctrine avec un ORM, dans mon cas ce sont des requêtes avec un ODM pour une bd mongodb

guilfred
Auteur

Merci kasalitech