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 :

Problème de partage de références


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Problème de partage de références
    Bonjour

    J'ai crée des fixtures dans l'ordre. Tout va bien.
    Dès que j'utilise des références, le chargement des données fonctionne aussi mais sans charger la table de jointure.
    Donc il y a un problème !!

    J'ai vérifié et vérifié partout et tout a l'air correct. Je ne comprend pas pourquoi cette table de jointure n'est pas chargée à mois que les références n'acceptent pas le mapping en yml.

    Infos:
    ManyToMany
    entités en yml
    Symfony 2.4.4
    les différents bundles comme datas-fixtures, etc ... ont été bien installés.

    Merci de votre aide
    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
    public function load(ObjectManager $manager){
        $post = new Post();
        $post->setTitle('Le Lorem Ipsum 7');
        $post->setSubtitle('test 7');
        $post->setChapo('Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise');
        $post->setBody('Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l\'imprimerie depuis les années 1500, quand un peintre anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n\'a pas fait que survivre cinq siècles, mais s\'est aussi adapté à la bureautique informatique, sans que son contenu n\'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.');
        $post->setCreatedAt(new \DateTime('2014-01-02 13:00:09'));
        $post->setUpdatedAt($post->getCreatedAt());
        $post->setPublished(true);
        $post->setPublishedAt($post->getCreatedAt());
     
        $this->addReference('Le Lorem Ipsum 7', $post);
     
        $manager->persist($post);
        $manager->flush();
    }
     
    public function getOrder() {
        return 1;
    }
    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
    public function load(ObjectManager $manager){
        $image = new Image();
        $image->setUrl('Bureau');
        $image->setAlt('bureau-13-02-2010.jpg');
        $image->setCreatedAt(new \DateTime('2014-01-02 13:00:09'));
        $image->setUpdatedAt(new \DateTime('2014-01-02 13:00:09'));
     
        $image->addPost($this->getReference('Le Lorem Ipsum 7'));
     
        $manager->persist($image);
        $manager->flush();
    }
     
    public function getOrder() {
        return 2;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public function load(ObjectManager $manager){   
        $categorie = new Categorie();
        $categorie->setTitle('Symfony1');
        $categorie->setCreatedAt(new \DateTime('2014-01-02 13:00:09'));
     
        $categorie->addPost($this->getReference('Le Lorem Ipsum 7'));
     
        $manager->persist($categorie);
        $manager->flush();
    }
     
    public function getOrder() {
        return 3;
    }
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Rubens\CoreBundle\Entity\Post:
        type: entity
        table: post
        repositoryClass: Rubens\CoreBundle\Entity\PostRepository
        id:
            id:
                type: integer
                id: true
                generator:
                    strategy: AUTO
        fields:
            title:
                type: string
                length: 255
            subtitle:
                type: string
                length: 255
            chapo:
                type: text
            body:
                type: text
            createdAt:
                type: datetimetz
            updatedAt:
                type: datetimetz
            published:
                type: boolean
            publishedAt:
                type: datetimetz
        lifecycleCallbacks: {  }
        manyToMany:
            images:
                targetEntity: Image
                cascade: ["persist"]
                inversedBy: posts
                joinTable:
                    name: post_image
                    joinColumns:
                        post_id:
                            referencedColumnName: id
                    inverseJoinColumns:
                        image_id:
                            referencedColumnName: id
            categories:
                targetEntity: Categorie
                inversedBy: posts
                cascade: ["persist"]
                joinTable:
                    name: post_categorie
                    joinColumns:
                        post_id:
                            referencedColumnName: id
                    inverseJoinColumns:
                        categorie_id:
                            referencedColumnName: id
    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
    Rubens\CoreBundle\Entity\Image:
        type: entity
        table: image
        repositoryClass: Rubens\CoreBundle\Entity\ImageRepository
        id:
            id:
                type: integer
                id: true
                generator:
                    strategy: AUTO
        fields:
            url:
                type: string
                length: 255
            alt:
                type: string
                length: 255
            createdAt:
                type: datetimetz
            updatedAt:
                type: datetimetz
        lifecycleCallbacks: {  }
        manyToMany:
            posts:
                targetEntity: Post
                mappedBy: images
    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
    Rubens\CoreBundle\Entity\Categorie:
        type: entity
        table: categorie
        repositoryClass: Rubens\CoreBundle\Entity\CategorieRepository
        id:
            id:
                type: integer
                id: true
                generator:
                    strategy: AUTO
        fields:
            title:
                type: string
                length: 255
            createdAt:
                type: datetimetz
        lifecycleCallbacks: {  }
        manyToMany:
            posts:
                targetEntity: Post
                mappedBy: categories

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    public function load(ObjectManager $manager){
    ****$post = new Post();
    ****$post->setTitle('Le Lorem Ipsum 7');
    ****$post->setSubtitle('test 7');
    Tu as un clavier sans barre d'espace ou tu as juste la tête dans les étoiles?
    Tu peux surement nous faciliter la tache en supprimant les bouts de code inutiles et ces étoiles qui parasitent la lecture/compréhension de ton problème. Le lorem Ipsum, on le connait, alors autant pas se le taper sur chaque bout de code

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bonjour

    Je viens de vérifier. et il n'y avait pas de * mais bon.
    alors vous avez une idée pourquoi la table de liaison n'est pas chargée...?
    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
        public function load(ObjectManager $manager){
            $post = new Post();
            $post->setTitle('Le Lorem Ipsum 7');
            $post->setSubtitle('test 7');
            $post->setChapo('Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise');
            $post->setBody('Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l\'imprimerie depuis les années 1500, quand un peintre anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n\'a pas fait que survivre cinq siècles, mais s\'est aussi adapté à la bureautique informatique, sans que son contenu n\'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.');
            $post->setCreatedAt(new \DateTime('2014-01-02 13:00:09'));
            $post->setUpdatedAt($post->getCreatedAt());
            $post->setIsPublished(true);
            $post->setPublishedAt($post->getCreatedAt());
     
            $this->addReference('post-1', $post);
     
            $manager->persist($post);
            $manager->flush();
        }

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    Perso je n'utilise pas les fixtures. C'est pour tes tests? a quoi correspond $this?

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    oui c'est pour les tests. ce sont des données factices.

    $this correspond à la classe dans github
    data-fixtures / lib / Doctrine / Common / DataFixtures / ReferenceRepository.php

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    Je ne peux pas specialement t'aider sur ce point.
    Pour pas que tu restes bloqué, je peux t'expliquer comment j'ai utilisé le bundle https://github.com/h4cc/AliceFixturesBundle pour les tests (et il comprend faker <3 )

    Dans ma classe mère de mes tests de repository:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function needData($file_name){
    	    $files = array(__DIR__.'/../Fixtures/'.$file_name.'.yml',);  //fichier qui comprend mes fixtures
    	    $manager = $this->get('h4cc_alice_fixtures.manager'); //je charge le service de fixtures amélioré
    	    // load entities.
    	    $objects = $manager->loadFiles($files, 'yaml'); //je load le fichier
    	    $manager->persist($objects, true); //je remplace les données de la base par ceux des fixtures
    	}
    Maintenant dans mes tests, pour charager ma base j'ai juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->needData('user_fixtures');

    Ok ca a l'air trop simple, alors voila un exemple de mes fixtures relationnelles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Application\Entity\Doctrine\Customer:
        customer{1..3}:
            email (unique): <email()>
            customerCode (unique): <username()>
            paramAutoSubscription: 60%? 1 : 0
     
    Application\Entity\Doctrine\ProductOrder:
        order{1..20}:
            registrationDate: <dateTimeBetween('-100 days', 'now')>
            state: <randomElement(array ('PROCESSING','PARTIAL','ON_HOLD','LOCKED','COMPLETED'))>
            payerClientNumber: @customer*
            createdAt: <dateTimeBetween($registrationDate, 'now')>
            updatedAt: 80%? <dateTimeBetween($createdAt, 'now')>
    ca me génère 3 utilisateurs avec emails, nom uniques, aléatoirement un booléen.
    ca me génère aussi 20 commandes avec des dates aléatoire réalistes, un état parmis les 4 que j'ai spécifié, ca lie la commande a un utilisateur

    Voila, meme si t'as pas envie de changer de techno tu sauras que ca existe Depuis que j'ai découvert ca je me vois pas utiliser les fixtures de base :p

  7. #7
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    oui, je te remercie d'avoir essayé de m'aider.
    J'ai déjà fait des multiples datas pour une seule entité. ca fonctionne bien.
    mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Rubens\CoreBundle\Entity\Post:
        post{1..10}:
            title: Symfony2
            subtitle: "Test 1"
            chapo: "Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise "
            body: "Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un peintre anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker."
            published: 1
            enabledVideo: 0
    mais ce n'est pas ça qui m'intéresse.
    Ce sont les références qui m'interessent car elles permettent de lier des entités via une table de jointure.
    c'est là qui me bloque
    je suppose que doctrine ne sait pas charger la table de jointure, surtout avec la relation ManyToMany bidirectionnelle.
    à vérifier !!

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    SI c'est une many to many as tu essayé de passer en reference une collection d'objet plutot qu'un seul $post?

  9. #9
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Je n'ai pas trop bien compris...

Discussions similaires

  1. Problème avec vector par référence
    Par vdumont dans le forum SL & STL
    Réponses: 11
    Dernier message: 09/05/2006, 08h25
  2. Problème de partage
    Par jyms2006 dans le forum Administration
    Réponses: 1
    Dernier message: 29/03/2006, 16h15
  3. Problème de partage de connection Internet
    Par Bradarys dans le forum Administration
    Réponses: 2
    Dernier message: 19/01/2006, 19h25
  4. [win] problème pour partager des fichiers entre 2 pc
    Par goma771 dans le forum Administration
    Réponses: 1
    Dernier message: 01/12/2005, 16h15
  5. probléme de partage de connection entre winxp et win2000
    Par unix27 dans le forum Administration
    Réponses: 1
    Dernier message: 29/07/2005, 20h02

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