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

Symfony PHP Discussion :

Requête SQL query builder


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut Requête SQL query builder
    Bonjour à tous,

    J'effectue une répétition pour récupérer la bonne données dans un tableau. Ma requête est bonne mais je souhaite généraliser cette répétition par n au lieu d'écrire beaucoup de lignes mais je ne trouve pas la solution.
    Pourriez vous m'aider ?

    Bien à vous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public function findByProduct($arr) {
        return $this->createQueryBuilder('p')
        ->select("p, partial c.{id, name}")
        ->leftJoin('p.company', 'c')
        ->andWhere('p.name LIKE :name')
        ->orWhere('p.name LIKE :name1')
        ->orWhere('p.name LIKE :name2')
        ->orWhere('p.name LIKE :name3')
        ->orWhere('p.name LIKE :name4')
        ->setParameter('name', $arr[0])
        ->setParameter('name1', $arr[1])
        ->setParameter('name2', $arr[2])
        ->setParameter('name3', $arr[3])
        ->setParameter('name4', $arr[4])
        ->getQuery()
        ->getArrayResult();
      }

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 554
    Par défaut
    les appels à "orWhere" et "setParameter" peuvent s'enchainer parce que ces méthodes retournent l'instance de "QueryBuilder".

    donc vous pouvez essayer quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    $query_builder = $this->createQueryBuilder('p')
        ->select("p, partial c.{id, name}")
        ->leftJoin('p.company', 'c')
    ;
     
    foreach ($arr as $index => $valeur) {
     
    	$code = "valeur$index";
     
    	if (0 === $index) {
    		$query_builder->where("p.name LIKE :$code");
    	} else {
    		$query_builder->andWhere("p.name LIKE :$code");
    	}
     
    	$query_builder->setParameter($code, $valeur);
     
    }
     
     
    return $query_builder
        ->getQuery()
        ->getArrayResult()
    ;

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut
    Merci pour ton aide, je vais essayer ça dans la journée.

    J'ai juste une question, je ne comprend pas cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $code = "valeur$index";

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 554
    Par défaut
    ça permet de construire une chaine de caractères avec des variables :
    https://www.php.net/manual/fr/langua...string.parsing

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut
    D'accord, merci pour l'information.

    Je viens de tester et j'ai cette erreur qui s'affiche dans la console du projet Symfony :
    [PHP-FPM ] [29-Jul-2022 05:46:53 UTC] 2022-07-29T05:46:53+00:00 [critical] Uncaught Error: syntax error, unexpected token "foreach", expecting ";"
    [Web Server ] Jul 29 07:46:53 |ERROR | SERVER GET (500) /api/products/liste/Boissons,Boissons%20gazeuses,Sodas,Sodas%20au%20cola,Boissons%20avec%20sucre%20ajout%C3%A9 ip="127.0.0.1"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public function findByProduct($arr) {
        return $this->createQueryBuilder('p')
        ->select("p, partial c.{id, name}")
        ->leftJoin('p.company', 'c')
        foreach ($arr as $index => $value) {
          $name = "value$index";
     
          if (0 === $index) {
            $query_builder->where("p.name LIKE :$name");
          } else {
            $query_builder->andWhere("p.name LIKE :$name");
          }
          $query_builder->setParameter($name, $value);
     
        }
        // ->andWhere('p.name = :name')
        // ->orWhere('p.name = :name1')
        // ->orWhere('p.name = :name2')
        // ->orWhere('p.name = :name3')
        // ->orWhere('p.name = :name4')
        // ->setParameter('name', $arr[0])
        // ->setParameter('name1', $arr[1])
        // ->setParameter('name2', $arr[2])
        // ->setParameter('name3', $arr[3])
        // ->setParameter('name4', $arr[4])
        ->getQuery()
        ->getArrayResult();
      }

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut
    Salut, c'est pour te dire qu'enfaite c'est bon, je n'avais pas tout modifié avec ce que tu m'as envoyé.

    Je te montre le résultat Nom : Capture d’écran 2022-07-29 à 09.51.33.png
Affichages : 478
Taille : 197,8 Ko

    Merci encore !

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut
    J'ai une dernière question enfaite.
    Le name affiche le texte index mais pas la valeur ensuite.

    Savez vous ce qu'il faut modifier pour récupérer la valeur ?

    Bien cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [5.1] Requête et sous requête avec query builder et laravel
    Par PIEPLU dans le forum Laravel
    Réponses: 1
    Dernier message: 01/11/2015, 13h28
  2. Requête SQL query avec paramètre non représentable graphiquement
    Par bimone dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/08/2009, 17h26
  3. [2.3.1] SQl Query Builder dans BIRT RCP
    Par Pierre_68 dans le forum BIRT
    Réponses: 5
    Dernier message: 08/11/2008, 02h12
  4. Enregistrer les données d'une requête SQL Query sur une autre table
    Par LE MAHJONG dans le forum Bases de données
    Réponses: 4
    Dernier message: 23/09/2008, 20h02
  5. Réponses: 11
    Dernier message: 20/05/2008, 20h08

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