Bonjour,

Voila je rencontre un petit problème avec mon code.

Je veux créer une fonction qui retourne la liste des types de chambres d'un hotel.
J'ai fait ceci ci-dessous :

    public function test(RoomTypeRepository $roomTypeRepo, $hotel_id){
        $roomTypes = $this->getDoctrine()
            ->getRepository(RoomType::class)
            ->findByHotel($hotel_id);
        dump($roomTypes);die;
//        return new Response('Cet hotel est le : '.$hotel_id .' et a des chambres' .$roomTypes->getName());
    }

J'aimerais que cela me sorte tous les types de chambres: simple, double, triple.

J'obtiens ce message d'erreur.
Je ne vois pas ce que je suis censé lui indiquer.
J'avais aussi tenté un foreach:

foreach ($roomTypes->getName() as $name)
 {
return new Response('Cet hotel est le : '.$roomTypes->getName());
 }

J'ai essayé des solutions comme celle de stackoverflow: https://stackoverflow.com/questions/30667122/error-call-to-a-member-function-on-array
mais je n'ai pas compris la procédure.
Je suis assez nouveau sur Symfony.

D'avance merci pour le coup de pouce vers la bonne solution :)

4 réponses


Gaylord.P
Réponse acceptée

La fonction findOneByHotel te retournera un résultat, et findByHotel retournera un tableau de résultats.

Donc ton foreach est la bonne solution. Mais comme ceci :

foreach ($roomTypes as $room)
{
    dump($room->getName());
}

Par contre faire un "return new Response()" dans un foreach ne te renverra que la réponse du premier tour, alors à toi de voir précisément ce que tu veux ...

Lartak
Réponse acceptée

Bonjour.
Il te faudrait déjà comprendre, que lorsque tu fais un return, la suite du code ne s'exécutera pas, et sera par conséquent interrompu.
Il n'y a donc aucun intérêt d'utiliser l'instruction return dans une boucle étant donné que la boucle n'ira pas plus loin que le premier tour de celle-ci.

Knuckles
Auteur

Merci Gaylord.
Oui, j'avais pourtant mis un findBy et pas findOneBy mais je dois aussi comprendre mieux l'histoire du return new Response

Knuckles
Auteur

Merci Lartak, encore une fois à ma rescousse.
Je pensais vraiment que le return dans une boucle allait marcher :)
Je vais revoir les bases que j'ai zappé