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

ORM PHP Discussion :

[Doctrine] chargement des données incompletes via fixtures


Sujet :

ORM PHP

  1. #1
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut [Doctrine] chargement des données incompletes via fixtures
    bon mon projet commence à ressembler a quelque chose, sauf que pour tester tout ça j'ai besoin de recuperer pas mal de données de mon ancienne application.

    Du coté de l'ancien, j'ai créer des pages qui me génère mes fichiers fixtures.

    Le probleme c'est quand je les charge, a partir d'un moment il ne me prend pas tout les champs, du style, je prend le first_name, le last_name mais pas le matricule et la section.

    Déja, j'ai du modifier le database.yml pour ne plus avoir des fatal error pour dépassement de mémoire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    all:
      doctrine:
        class: sfDoctrineDatabase
        param:
          dsn:      mysql:host=localhost;dbname=it_toolbox
          username: root
          password: xxxx
          profiler: false
    y a t il un autre moyen de charger des données avec symfony ?

    EDIT: pour info ma table sfGuardUser fait déja 700 lignes.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Points : 396
    Points
    396
    Par défaut
    Le fait que tu génères tes fixtures t'assure de rester dans l'environnement classique de Symfony.

    Le probleme c'est quand je les charge, a partir d'un moment il ne me prend pas tout les champs, du style, je prend le first_name, le last_name mais pas le matricule et la section.
    J'avoue que ça me paraît très bizarre ça.

    Déja, j'ai du modifier le database.yml pour ne plus avoir des fatal error pour dépassement de mémoire:
    Je ne comprends pas pourquoi toucher au databases.yml dans ce cas : n'est-ce-pas plutôt d'allouer plus de mémoire à PHP qu'il faudrait ?
    (je ne sais plus exactement où est la modif à faire, peut-être le php.ini)

    Mais si tu penses que le problème est dans le dépassement de mémoire, je te conseillerais dans un premier temps d'essayer de tronquer tes fixtures et de laisser peu de données dedans : si le problème persiste, c'est que ce n'est pas un problème de dépassement de mémoire.

  3. #3
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut
    en faites le dépassement de mémoire est lié à la mise en cache de toute les requêtes exécutés par doctrine. Sur un PC un peu poussif, ça le met vite a genoux.
    J'ai trouvé cette parade sur le net:
    qui fonctionne (je la remet à true quand je veut tracé mes requêtes).

    par contre, le fait qu'il oublie certains data par enregistrement la je suis coincé.

    Comme mon appli à beaucoup de relations croisé, il est difficile de réduire le nombre d'enregistrement (si j'enlève un user, il peut être nécessaire comme responsable d'un site ou d'un pays, ou bien gérer une section ou ...).

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Le fixature n'est pas conçu, à l'origine pour faire de l'importation de données en masse. Il permet de peupler et repeupler la base de donnée, à l'identique, pour simplifier les tests développeurs et les tests automatique.

    Le mieux serait de passer par de bête (mais efficaces) fonction export importe.

    Et plutôt que de générer su yaml, génère du sql.

  5. #5
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut
    je croit que je n'aurait pas trop le choix malheureusement :/

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Alors il faudra couper en petits paquets

  7. #7
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut
    je croyait que l'append de doctrine ne fonctionnait pas sous symfony ?

  8. #8
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Il fonctionne mal...

    Il serait largement plus simple de passer, pour un gros volume, par des injections SQL.

    Quitte à passer par une base local pour triturer les données et les formater correctement (ce que je ferrais).

  9. #9
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut
    ça va faire du boulot ça.
    bon je vais essayer de me faire des fixtures de test pas trop long mais qui fonctionne. ce qui me permettra de tester mon appli.
    Et en paralléle me créer des request SQL basé sur ma BD actuelle pour charger tout ça dans la base de prod finale.

  10. #10
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Si tu as la possibilité de créer du code capable de créer, pour tes données, un fichier YAML, modifier ce code pour faire des ajouts en SQL ne devrait pas poser beaucoup de problème il me semble.

  11. #11
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut
    bein la difference se sont les relations non ?
    un user appartient a une section, mais une section a un superviseur, en YAML, pas de probléme j'utilisait le nom de la relation. mais en SQL, ça devient chaud,
    je doit d'abord créer tout les user, ensuite creer les section et leur affecter l'id generer pour le champ superviseur et ensuite mettre a jour le champ section de la table user avec l'id generer de la table section

    en yaml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    User:
      User1:
        last_name: Dupont
        first_name: bruno
        Section: Section1
      User2:
        last_name: Durand
        first_name: Antoine
     
    Section:
      Section1:
        name: IT&Co
        manager: User2
    en SQL j'ose même y penser !!

  12. #12
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Mais ta base existe déjà non ?

  13. #13
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut
    mes données sont bien dans une base de données mais son schéma ne correspond absolument pas à la base de données que j'utiliserai sous symfony.
    Exemple tout bête les infos user se trouvent dans 4 tables alors que dans la version symfony tout se trouve dans sfGuardUser.

  14. #14
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Si tu arrives à faire des "petit" yaml de fixature, cela devrait passer.

    Mais il faut couper par X users et toutes leurs relations, ce qui risque de ne pas être possible pour les responsables de groupes... qui peuvent être dans un autre groupe !.

    Si non, il faut en passer par une série à la mano de procédure de m...

    Il y a bien des programmes qui font cela tous seul, mais je ne pense pas que tu aies le budget pour (plus de 10k€). Et encore, même là, il faut écrire un programme, simple, de translation.

  15. #15
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut
    je ferai des test.
    si je peut effectivement creer des fixatures de petite taille et les integrer en append, ça devrait le faire:

    en important dans un premier temps les table de groupe sections et leur gestionnaire, je pourrait ensuite importer le reste des users et ensuite les infos les concernants.
    si:

    si par exemple dans un premier jet j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    User:
      User01:
        firstname: bruno
        lastname: Dupont
    Section:
      Section01:
         name: WA251
        description:  gtyhh
        manager_id: User01
    est ce que dans un append je pourrait saisir ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    user10:
      firstname: eric
      lastname: duclos
      section: Section01
    et dans un 3eme append
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ChqDej:
      user: user10
      date: "05-11-2010"
      nb: 21
    ?

  16. #16
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    En fait, non.

    Il faut que les noms utilisés soient définit dans le même fichier. Enfin presque, tu peux utiliser plusieurs fichiers (un par table par exemple) mais les charger d'un coup, ce qui ici ne nous intéresse pas.

    Donc avec tes trois fichiers, chargés en trois fois, le deuxième et le troisièmes ne passeront pas.

    Ce qui était ma principale inquiétude.

  17. #17
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut
    je pense que je vais pas échapper à la création d'une base intermédiaire via Access, pour son interface graphique

  18. #18
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Quel est la base d'origine ? Quel est l'encodage de la base d'origine ? Quel est l'encodage de la base MySql de destination ?

    Access peut travailler sur une base MySql en ODBC...

  19. #19
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut
    base d'origine MySQL.
    je travaille déja en ODBC MySQL->Access, pour des request rapides à faire et temporaire

  20. #20
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    C'est pas simple, vu que si j'ai bien compris, tu as beaucoup de données et tu doit maintenir une intégrité structurel alors que tu changes les clés primaires.

    Il n'y a pas de solution miracle.

    Il faut faire très attention au charset entre les transferts pour ne pas perdre les accentuées.

    Il faudra probablement faire une table intermédiaire avec les deux numérotation, ancienne et nouvelle pour pouvoir faire les nouvelles jointures sur les bonnes tables.

    A priori, je travaillerais le tous en SQL directement (mais il faut être à l'aise). Access est un con pis aller. Une autre possibilité, si les données son nombreuses mais raisonnablement, une feuille de calcul...

Discussions similaires

  1. [VB6][MYSQL] recuperer des données MySQL via PHP
    Par psykotox dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 18/01/2008, 11h25
  2. chargement des données d'un datawarehouse syntaxe oracle
    Par mehdiing dans le forum Administration
    Réponses: 3
    Dernier message: 01/05/2007, 11h23
  3. Chargement des données d'une classe vers une autre
    Par nosdev dans le forum Access
    Réponses: 1
    Dernier message: 16/01/2007, 14h44
  4. Réponses: 2
    Dernier message: 20/11/2006, 14h35
  5. Chargement des drivers access via ODBC sous Qt 3
    Par Higestromm dans le forum Bases de données
    Réponses: 10
    Dernier message: 09/01/2006, 14h30

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