Symfony 4 - Call to a member function getName() on array

Ce sujet est résolu
Default
,

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éponse

Default
,

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 ...

17162
,

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.

Default
,

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

Default
,

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é