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 :

requete complexe et rendu [Doctrine]


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut requete complexe et rendu
    et oui me revoila.
    Ce coup ci j'essaye d'obtenir un report statistique a partir d'une requête assez complexe..
    et bien sur ça ne marche pas.
    Voici le schéma en question:
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
     
    sfGuardUser: 
      actAs: [Timestampable]
      columns:
        first_name: string(255)
        last_name: string(255)
        email_address:
          type: string(255)
          notnull: true
          unique: true
        username:
          type: string(128)
          notnull: true
          unique: true
        algorithm:
          type: string(128)
          default: sha1
          notnull: true
        salt: string(128)
        password: string(128)
        is_active:
          type: boolean
          default: 1
        is_super_admin:
          type: boolean
          default: false
        last_login:
          type: timestamp
        matricule:
          type: integer
          unique: true           
        epass:
          type: string(20)
          unique: true      
        costcenter_id: { type: integer }
        company_id: integer
        emailintranet: 
          type: string(255)
          unique: true    
        site_id: { type: integer }
        contrat: 
          type: string(3)      
        relationwithdupont:
          type: string(5)
        esi:
          type: boolean
          default: 0
        grpe_chq_dej_list_id: 
          type: integer
        startdate: 
          type: date
        gardenleavedate:
          type: date
        offrolldate:
          type: date
      indexes:
        is_active_idx:
          fields: [is_active]
        unique:
         fields: [first_name, last_name]
         type: unique
      relations:
        Groups:
          class: sfGuardGroup
          local: user_id
          foreign: group_id
          refClass: sfGuardUserGroup
          foreignAlias: Users
        Permissions:
          class: sfGuardPermission
          local: user_id
          foreign: permission_id
          refClass: sfGuardUserPermission
          foreignAlias: Users    
        Costcenter:
          class: Costcenter
          local: costcenter_id
          foreign: id
          onDelete: CASCADE
        Site:
          local: site_id
          foreign: id
          onDelete: SET NULL
        Company:
          local: company_id
          foreign: id
        grpe_chq_dej_list:
          class: GrpeChqDej
          local: grpe_chq_dej_list_id
          foreign: id 
          onDelete: SET NULL  
     
    groupasset:
      actAs: 
        Timestampable:
        Sluggable:
          fields: [name, site]
          unique: true
          canUpdate: true
      columns:
        name: string(255)
        site_id: integer
        user_id: integer
        status: string(2)
        person: string(2)
        lastview: date
      indexes:
        Unique1:
          fields: [name, site_id]
          type: unique
      relations:
        owner:
          class: sfGuardUser
          local: user_id
          foreign: id
          foreignAlias: groupassets
          onDelete: SET NULL
        site:
          class: Site
          local: site_id
          foreign: id
          onDelete: SET NULL
     
    Asset:
      tableName: asset
      actAs: [Timestampable]
      columns:
        typeasset_id: integer
        value: string(255)
        groupasset_id: integer
        etat: string(50)
        action: string(50)
        chargebycsc:
          type: boolean
        lastview: date
      indexes:
        unique1:
          fields: [typeasset_id,value,groupasset_id]
          type: unique
        lastview:
          fields: 
            lastview:
              sorting: DESC      
      relations:
        type:
          class: Typeasset
          local: typeasset_id
          foreign: id
          foreignAlias: listTypeAsset
          onDelete: CASCADE
        group:
          class: groupasset
          local: groupasset_id
          foreign: id
          foreignAlias: listGroupAsset
     
    email:
      columns:
        datestate: date
        asset_id: integer
        specialaccount: string(50)
        total: integer
        billable_euro: float(2)
        billable_act: float(2)
        snapshot_annual_act: float(2)
        billable_adj: float(2)
        snapshot_annual_adj: float(2)
      indexes:
        unique:
          fields: [datestate, asset_id]
          type: unique
      relations:
        Asset:
          local: asset_id
          foreign: id
          foreignAlias: monthlydiskspaceln
    mon fichier action:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->report =  Doctrine_Core::getTable('email')->reportbyCostCenter($site);
    mon fichier emailTable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public function reportbyCostCenter($site)
        {
            $q = $this->createQuery('e')
                    ->select('e.datestate as date, own.costcenter_id as costcenter, SUM(e.total) as Mb, SUM(e.billable_euro) as euro')
                    ->leftJoin('e.Asset asset')
                    ->leftJoin('asset.group grp')
                    ->leftJoin('grp.owner own ')
                    ->where('own.site_id= ?', $site)
                    ->groupBy('e.datestate, own.costcenter_id')
                    ->orderBy('e.datestate DESC');
            return $q->execute();
        }
    et mon template:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php include_partial('filtersite', array('filter' => $filter))	?>
    <table>
    <?php foreach($report as $line): ?>
        <tr>
            <td><?php echo $line->getDate()?></td>
            <td><?php echo $line->getCostcenterid()?></td>
            <td><?php echo $line->getMb()?></td>
            <td><?php echo $line->getEuro()?></td>
     
        </tr>
    <?php endforeach;?>
    le but étant d'afficher un tableau par date/centre de cout la taille total et le cout.

    Sauf que alors que j'ai plusieurs valeurs date, il ne m'affiche que la premiere ligne !!

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Ouf, j'ai eu peur que tu n'aies eu un accident, style un Bundle de Symfony 2 qui aurait déboité devant toi ou un truc dans le genre...

    Bon, avant de me faire coincer par un modérateur pour hors sujet...

    C'est pas quelque chose qu'une simple lecture va permettre de résoudre. Essaie de récupérer le code sql généré dans la barre de débug et de le tester seul. Pour voir en SQL pure ce que tu récupère. Puis de l'optimiser pour qu'il te renvoie ce que tu veux. Puis d'adapter le DQL pour qu'il colle.

    Il est aussi possible que cela marche en SQL. Regarde alors du côté de l'ydratation de tes données. Je n'ai rien vu à ce sujet, hors il me semble que dans ton cas, si tu n'hydrate pas, il va te retourner des trucs pas naturel.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    la requete SQL fonctionne et me renvoie bien 6 enregistrements.
    D'ailleur j'ai pompé sur un autre Post ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return $q->execute(array(), Doctrine::HYDRATE_SCALAR);
    et la j'ai bien mes 6 enregistrements !!!!

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    En fait, je pense qu'en objet il doit garder une partie de la structure des liaisons et qu'il aurait fallut faire des appels aux méthodes ouvrants les collections de niveaux inférieur.

    Avec l’hydratation, et pour ce que tu veux en faire, c'est bien plus simple.

    Bon, même pas de quoi déranger un bundle...

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    En fait, je pense qu'en objet il doit garder une partie de la structure des liaisons et qu'il aurait fallut faire des appels aux méthodes ouvrants les collections de niveaux inférieur.
    j'ai encore du boulot pour tout comprendre moi

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Par défaut Doctrine récupère les données sous forme d'une collection (Doctrine_Collection) d'objet (sfDoctrineRecord). Ceux-ci gèrent les dépendances avec leurs enfants dans les requêtes par des appels à des méthodes pour récupérer des collections d'objets "enfants".

    Ici, le tableau est bien plus simple (et rapide).

    En fait, dés qu'il ne s'agit que de récupérer des données pour l'affichage (qui ne devront pas être mises à jour dans la foulée immédiate), l’hydratation devrait toujours être privilégiée.

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

Discussions similaires

  1. Aide requete complexe
    Par Sabine78 dans le forum Access
    Réponses: 9
    Dernier message: 18/04/2006, 21h28
  2. requete complexe
    Par nicohugo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/03/2006, 08h10
  3. Requete complexe
    Par d1g-2-d1g dans le forum Langage SQL
    Réponses: 9
    Dernier message: 02/05/2005, 14h47
  4. Requete complexe
    Par Pfeffer dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/02/2005, 17h42
  5. requete complexe
    Par Thunder_nico dans le forum Langage SQL
    Réponses: 8
    Dernier message: 07/10/2004, 11h36

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