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

Discussion :

Concaténation de 2 objets PersistantCollection [4.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut Concaténation de 2 objets PersistantCollection
    Bonjour,

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

    ### Ce que je fais

    Je récupere les clients d'un utilisateur, puis les véhicules de chaque client. Puis j'essayes de mettre tous les véhicules dans la varable $véhicules.

    ```
    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
     
    /**
         * @Route("/", name="accueil")
         */
        public function index()
        {
          //récuperation des clients de l'utilisateur
          $clients = $this->getUser()->getClients();
          //récupération de entitymanager
          $entityManager = $this->getDoctrine()->getManager();
          //nouvelle instance de PsersistentCollection
          $vehicules = new PersistentCollection($entityManager, Vehicule::class, $vehicules = new Collection()); //erreur ici
          foreach($clients as $client)
          {
            // on ajoute toutes les vehicules de tous les clients dans l $vehicules
            $vehicules->add($client->getVehicules());
          }
            return $this->render('follo_car_service/index.html.twig', [
                'vehicules' => $vehicules,
            ]);
        }
    ```

    ### Ce que je veux

    Je recherche un moyen de concaténer 2 objets PersistantCollection mais Symfony me jete une erreur comme quoi je ne peux pas car il y a une erreur dans l'instance Collection.

    ### Ce que j'obtiens

    J'obtiens une erreur me disant que je ne peux pas instancier une Collection car il manque un statement.

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    5 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 5 039
    Points : 11 245
    Points
    11 245
    Par défaut
    Bonjour,

    Je ne connais pas ce que vous essyaez de faire, mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $vehicules = new PersistentCollection($entityManager, Vehicule::class, $vehicules = new Collection());
    vous utilisez deux fais la variables $vehicules, une fois pour instancier votre PersistentCollection et une fois pour créer une collection, cela me semble problématique (ou pas).
    dans la doc de Doctrine on peux lire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    __construct(EntityManagerInterface $em, ClassMetadata $class, Collection $collection)
    donc j'aurais tendance à faire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $collection = new Collection();
     //nouvelle instance de PsersistentCollection
    $vehicules = new PersistentCollection($entityManager, Vehicule::class, $collection);

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut Erreur interface
    Bonjour et merci pour votre réponse,
    J'ai essayé sans grand espoir car il me semble que les deux code sont équivalent mais sait on jamais....enfin merci d'avoir tenté.
    J'ai la même erreur que la dernière fois qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cannot instantiate interface Doctrine\Common\Collections\Collection
    Alors avec tout hasard j'ai essayé d'implementé dans le controleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use Doctrine\Common\Collections\CollectionInterface
    (qui n'existe peut être pas d'après Google.
    Même si vous n'avez que des pistes, des conseils, une idée je vous remerci de votre aide.
    C'est un projet qui me tient beaucoup à coeur étant un simpe étudiant en 1er année de DUT.

    D'autres pistes ?

    Merci

    Vincent

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    5 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 5 039
    Points : 11 245
    Points
    11 245
    Par défaut
    si on suit le souci ici : https://stackoverflow.com/questions/...ons-collection
    il y aurait un problème dans la façon de joindre les tables (OneToMany), à explorer.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut OneToMany une erreur ?
    Je ne crois pas qu'il y ait d'erreur pour la simple raison que c'est le framework symfony 4 qui l'a généré, et de souvenir je n'ai pas eu besoin d'adapter.
    Merci pour le suivi de la discusion sur stackoverflow mais cela ne répond pas totalement à ma problématique. Je suis toujours dans le flou.
    Mais en tout cas merci beaucoup de votre aide.
    Si vous avez d'autre piste je suis tout a fait preneur ?

    VIncent

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    5 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 5 039
    Points : 11 245
    Points
    11 245
    Par défaut
    Pouvez-vous me dire ce que retourne ce code

    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
     
    /**
         * @Route("/", name="accueil")
         */
        public function index()
        {
          //récuperation des clients de l'utilisateur
          $clients = $this->getUser()->getClients();
          //récupération de entitymanager
          $entityManager = $this->getDoctrine()->getManager();
          //nouvelle instance de PsersistentCollection
          $vehicules = new PersistentCollection($entityManager, Vehicule::class, $vehicules = new Collection());
          var_dump($vehicules);
    die();
     
        }
    Car tout ce que je lis, l'erreur ne serait pas du à l'instanciation.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut Même erreur
    Bonjour,
    Merci de me consacréer du temps.
    j'ai toujours la même erreur :
    Cannot instantiate interface Doctrine\Common\Collections\Collection
    Je crois que c'est le moteur de symfony qui refuse l'instance. Mais rien de sûr.
    Je continu à rechercher de mon coté.
    Une autre idée ?

    Merci Vincent

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut Debug info
    d'après mon debugger et avec le cote précedent l ligne possant réellement le probléme pour le moteur de symfony est celle là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $vehicules = new PersistentCollection($entityManager, Vehicule::class, $vehicules = new Collection());
    E espérant que cela puisse vous écliarer plus que moi

    Vincent

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2012
    Messages
    533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2012
    Messages : 533
    Points : 935
    Points
    935
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cannot instantiate interface Doctrine\Common\Collections\Collection
    normal Collection étant une interface on peut pas l'instancier. Par polymorphisme tu peux remplacer Collection par ArrayCollection car cette dernière implémente Collection. Mais il se trouve que ton entité Client a défini déjà une collection de véhicules tu n'a pas besoin d'en créer une pour ajouter les véhicules. Pour récupérer la collection des véhicules associés à chaque client, il va falloir interroger ta BD en faisant une requête DQL ou query builder.

    Tu peux t'appuyer sur l'exemple de la doc symfony qui récupère un produit ainsi que sa catégorie.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut Parfait !
    Bonjour à tous !
    Je vous remercie tous beaucoup pour vos indications. Le probleme est resolu avec une requete DQL. Je ne sais pas si cela pourra aider mais je vais vous la fournir au cas où des débutant come mi passeront par la
    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
    /**
          * @return Vehicule[] Returns an array of Vehicule objects
          */
     
        public function loadVehicules($idUser)
        {
          $entityManager = $this->getEntityManager();
          $query = $entityManager->createQuery('
            SELECT v
            FROM App\Entity\Vehicule v
            WHERE v.proprietaire IN (
              SELECT c
              FROM App\Entity\Client c
              WHERE c.user = :idUser
              )
          ');
          $query->setParameter('idUser', $idUser);
          return $query->execute();
        }

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

Discussions similaires

  1. Concaténation de deux objets
    Par tunis71187 dans le forum Deski
    Réponses: 0
    Dernier message: 15/12/2011, 16h29
  2. Réponses: 12
    Dernier message: 17/01/2008, 11h46
  3. Concaténation de plusieurs champs dans un objet
    Par bastoonet dans le forum Débuter
    Réponses: 3
    Dernier message: 27/09/2006, 11h13
  4. [AJAX] Concaténer 2 objets HttpRequest
    Par Braz dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/06/2006, 13h45
  5. Réponses: 1
    Dernier message: 30/12/2005, 10h57

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