Partage
  • Partager sur Facebook
  • Partager sur Twitter

Symfony 7 requête à partir d'un tableau d'ID

Faire une requête doctrine à partir d'un tableau d'Id

Sujet résolu
    26 mars 2024 à 10:49:41

    Framework : Symfony 7
    BDD : MySQL
    PHP : 8.3

    Bonjour la communauté,

    Je débute sur Symfony et tourne depuis un moment dans le but de créer une requête en BDD, à savoir : Dans ma table "Professionnels"  j'aimerais obtenir tous les objet "Professionnels" en rapport avec certains ID.
    Je sais que je peux l'écrire en dur comme ceci, par exemple :

    $pros = $professionnelRepository->findById(1,3,5);


    Mais j'aimerais savoir si il est possible de la faire à partir du tableau d'Id que je reçois, à savoir :

     array:3 [▼
      0 => array:4 [▼
        "id" => 4
        0 => 4
        "distance" => 9.4935297966003E-5
        1 => 9.4935297966003E-5
      ]
      1 => array:4 [▼
        "id" => 1
        0 => 1
        "distance" => 26.440792405088
        1 => 26.440792405088
      ]
      2 => array:4 [▼
        "id" => 5
        0 => 5
        "distance" => 830.78262322341
        1 => 830.78262322341
      ]
    ]



    Merci d'avance pour votre aide.

    -
    Edité par Jean-DavidIrles 26 mars 2024 à 11:19:24

    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2024 à 11:04:44

      Bonjour, si cette méthode(findById) existe bel et bien et marche comme tu le penses, alors tu peux faire ceci:
      $array; // Ton tableau
      
      $array = array_map(fn($arr) => $arr['id'], $array);
      
      $pros = $professionnelRepository->findById(...$array);
      
      • Partager sur Facebook
      • Partager sur Twitter
        26 mars 2024 à 11:08:10

        Salut

        Je te conseille très vivement de changer ton titre, le sous-titre est malheureusement invisible dans les listes de sujet, or c'est ce qui permettrait à d'autres de retrouver les indications s'ils prennent le temps de chercher.

        Pour ta question, je te conseille de regarder du côté de la fonction array_column(), qui fait exactement ce qui est présenté avec array_map() ci-avant, mais de façon native. Le tableau résultant, tu peux le passer à la méthode findById(). Je doute cependant que ce que tu montres comme exemple (similaire à ce qui est montré avec ...$array ci-dessus au moment de l'édition) fonctionne comme tu t'y attends :

        1. ton appel est, sauf si tu as réécrit findById(), intercepté par __call(), qui redirige vers findBy()
        2. findBy() prend bien plusieurs arguments, seulement les deuxième et troisième ne sont pas d'autres valeurs pour le premier

        -
        Edité par Ymox 26 mars 2024 à 11:26:43

        • Partager sur Facebook
        • Partager sur Twitter
          26 mars 2024 à 11:32:00

          Parfait, merci pour vos réponses. Et bien array_column() fonctionne à merveille c'est exactement ce que j'attendais.

          $idPros = array_column($result, 'id');
                   
          $pros = $professionnelRepository->findById($idPros);

          Merci à vous2 pour vos conseils ;-)

          • Partager sur Facebook
          • Partager sur Twitter
            26 mars 2024 à 11:34:57

            Note que suivant comment ton tableau $result est généré, il pourrait être plus intéressant d'utiliser une autre méthode findBy*() que de devoir extraire ces IDs…

            N'oublie pas de signaler tes sujets comme résolu si c'est le cas. Il y a un bouton au sommet des discussions pour ce faire.

            -
            Edité par Ymox 26 mars 2024 à 11:35:53

            • Partager sur Facebook
            • Partager sur Twitter

            Symfony 7 requête à partir d'un tableau d'ID

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown