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 :

ApiPlatforme response oneToMany [4.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut ApiPlatforme response oneToMany
    Bonjour,
    J'ai une table People qui à un lien 1-n vers etudiants, je voudrais donc retourner toutes les infos.
    Actuellement j'obtiens ceci

    Code json : 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
    29
    30
    31
    32
     
      "hydra:member": [
            {
                "id_people": 1,
                "identifiant": "etu******",
                "nom": "********",
                "prenom": "Amandine",
                "matricule": *******,
                "hash": "795f28aaab5c7ac95c89ca32c5846aca",
                "uuid": "0308c5b7-747b-4b13-8588-001e3c9b2701",
                "numero": 2,
                "created_at": "2019-05-02",
                "updated_at": "2019-05-02",
                "id_etudiant": 1,
                "email_ad": "etu*****@student.henallux.be",
                "email_perso": "amandine.*****.02@student.henallux.be"
            },
            {
                 "id_people": 1,
                "identifiant": "etu******",
                "nom": "********",
                "prenom": "Amandine",
                "matricule": *******,
                "hash": "795f28aaab5c7ac95c89ca32c5846aca",
                "uuid": "0308c5b7-747b-4b13-8588-001e3c9b2701",
                "numero": 2,
                "created_at": "2019-05-02",
                "updated_at": "2019-05-02",
                "id_etudiant": 2,
                "email_ad": "********@live.be",
                "email_perso": "amandine.********.02@student.henallux.be"
            },


    Ce que je voudrais, quelque chose dans le genre :

    Code json : 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
     
     "hydra:member": [
            {
                "id_people": 1,
                "identifiant": "etu******",
                "nom": "********",
                "prenom": "Amandine",
                "matricule": *******,
                "hash": "795f28aaab5c7ac95c89ca32c5846aca",
                "uuid": "0308c5b7-747b-4b13-8588-001e3c9b2701",
                "numero": 2,
                "created_at": "2019-05-02",
                "updated_at": "2019-05-02",
                 student {
                  {
                "id_etudiant": 1,
                "email_ad": "etu*****@student.henallux.be",
                "email_perso": "amandine.*****.02@student.henallux.be"
     
                 },
                 {
                "id_etudiant": 2,
                "email_ad": "********@live.be",
                "email_perso": "amandine.********.02@student.henallux.be"
                       }
     
            },

    Pour arriver à la première solution, je fais ceci, je suis sur que c'est pas la bonne solution :

    Controller :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     
     
    namespace App\Controller;
     
     
    use App\Entity\Person;
    use Doctrine\DBAL\Connection;
    use Symfony\Component\Routing\Annotation\Route;
     
    class Student
    {
     
        /**
         * @param Person $data
         * @return Person
         * @Route(
         *     name="get_students",
         *     path="api/students",
         *     methods={"GET"},
         *     defaults={
         *       "_controller"="\App\Controller\Student::class",
         *       "_api_resource_class"="App\Entity\Person",
         *       "_api_collection_operation_name"="get_students"
         *     }
         *
         * )
         */
        public function __invoke(Connection $connection)
        {
            $sql = "select * 
                    from brain.people p
                    inner join brain.etudiants e
                    on e.id_people = p.id_people";
            $data = $connection->fetchAll($sql);
            return $data;
        }
     
    }
    Entity :

    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
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    namespace App\Entity;
     
    use ApiPlatform\Core\Annotation\ApiResource;
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Serializer\Annotation\Groups;
     
    /**
     * Person
     * @ApiResource(
     *     itemOperations={
     *     "get",
     *     "get_students"={
     *         "method"="GET",
     *         "path"="api/students",
     *         "controller"=Student::class,
     *         "defaults"={"_api_receive"=false},
     *     }
     *     }
     *   )
     * @ORM\Table(schema="brain",name="people", indexes={@ORM\Index(name="IDX_1420BCB6F55AE19E", columns={"numero"})})
     * @ORM\Entity
     */
    class Person
    {
        /**
         * @var int
         * @Groups({"etudiant"})
         * @ORM\Column(name="id_people", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="SEQUENCE")
         * @ORM\SequenceGenerator(sequenceName="people_id_people_seq", allocationSize=1, initialValue=1)
         */
        private $idPeople;
    ......
    Pouvez-vous me donner une piste ?

    Merci.

  2. #2
    Invité de passage
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Mai 2019
    Messages : 1
    Par défaut Problem of mapping
    Vis à vis de la configuration présentée, il n'est pas possible de récupérer les données depuis l'entité Person, uniquement depuis l'entité Student.
    Il faut que le mapping soit bi-directionnel

    https://www.doctrine-project.org/pro...-bidirectional

    Ainsi tu pourras récupérer les données, et il faut ensuite utiliser les "serialization groups" pour inclurer les données via les inclusions de relation

    https://api-platform.com/docs/core/s...ding-relations

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Merci.

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

Discussions similaires

  1. Objet Response error 'ASP 0156 : 80004005'
    Par Doodoo256 dans le forum ASP
    Réponses: 2
    Dernier message: 09/06/2004, 09h13
  2. [Servlet] response.getWriter()
    Par phoebe dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 18/05/2004, 11h36
  3. Response.BinaryWrite dans un formulaire
    Par faamugol dans le forum ASP
    Réponses: 4
    Dernier message: 12/05/2004, 12h45

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