Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 19-12-2008 11:50:30

Fuggerbit
Membre
Date d'inscription: 17-12-2008
Messages: 54

[Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

Bonjour,
J'essaye de créer un Zend_Db_Table sur ma vue oracle :

class VRotatifCalculeRct extends Zend_Db_Table_Abstract
{
    protected $_name = 'V_ROTATIF_CALCULE_RCT';
    protected $_primary = 'cod_magasin';//array('COD_MAGASIN', 'RCT', 'DATE_REAS');
}

Mais j'obtiens l'erreur suivante :
Uncaught exception 'Zend_Db_Table_Exception' with message 'Primary key column(s) (cod_magasin) are not columns in this table ()

A priori il ne reconnait pas la vue car il ne me cite aucune colonne.
Par contre sur une vraie table je n'ai pas ce pb.

Y a t il une manip à faire?

Mon adapter est 'Oracle'
Merci

Dernière modification par Fuggerbit (08-01-2009 10:17:53)

Hors ligne

 

#2 19-12-2008 13:15:54

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

Hello,

J'ai patché ça la semaine dernière. Ce sera donc disponible avec la 1.7.2 la semaine prochaine (ou sur le trunk actuel).

Il faut de plus laisser le protected $_primary comme tu l'as mis car une vue Oracle n'a pas toujours de clé primaire et que Zend_Db_Table en a besoin d'une.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 19-12-2008 14:09:57

Fuggerbit
Membre
Date d'inscription: 17-12-2008
Messages: 54

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

mikaelkael a écrit:

Hello,

J'ai patché ça la semaine dernière. Ce sera donc disponible avec la 1.7.2 la semaine prochaine (ou sur le trunk actuel).

Il faut de plus laisser le protected $_primary comme tu l'as mis car une vue Oracle n'a pas toujours de clé primaire et que Zend_Db_Table en a besoin d'une.

A+

Arf...
Et tu n'aurais pas besoin d'un béta testeur par hasard? tongue

Hors ligne

 

#4 22-12-2008 14:37:12

Fuggerbit
Membre
Date d'inscription: 17-12-2008
Messages: 54

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

mikaelkael a écrit:

Hello,

J'ai patché ça la semaine dernière. Ce sera donc disponible avec la 1.7.2 la semaine prochaine (ou sur le trunk actuel).

Il faut de plus laisser le protected $_primary comme tu l'as mis car une vue Oracle n'a pas toujours de clé primaire et que Zend_Db_Table en a besoin d'une.

A+

Salut,
Je viens de relire le message, pourrait-on me dire ce qu'est le trunk et comment je peux y accéder?
Merci

Dernière modification par Fuggerbit (22-12-2008 14:59:27)

Hors ligne

 

#5 22-12-2008 17:06:12

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

Hello,

Zend Framework est développé sous Subversion. La représentation de la vie du développement est faite sous la forme d'un arbre. Le trunk (=tronc) est la structure principale de développement tandis que les branches s'arrêtent de vivre en fin de correction de bugs.

Le trunk ZF est situé à cette adresse : http://framework.zend.com/svn/framework/standard/trunk/

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#6 07-01-2009 17:19:07

max
Nouveau membre
Date d'inscription: 14-09-2007
Messages: 8

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

Bonsoir à tous.

J'ai le même problème avec Zend_Db_Table_Abstract et les vues sous Oracle.
Sauf erreurs de ma part j'utilise le framework 1.7.2 et j'ai toujours l'erreur "Zend_Db_Table_Exception' with message 'Primary key column(s)" ...

Code:

class Souscripteur extends Zend_Db_Table_Abstract
{
    protected $_name = 'V_SOUS'; // La vue
    protected $_primary = 'V_SOUS_ID'; // Une colonne de la vue...
}

Si QQu1 a une explication ??
Merci d'avance.

Dernière modification par max (07-01-2009 17:19:38)

Hors ligne

 

#7 07-01-2009 17:43:52

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

Hello,

Pour être sûr, va dans le fichier /library/Zend/Db/Adapter/Oracle.php et ligne 290, tu dois avoir :

Code:

        $sql = "SELECT TC.TABLE_NAME, TB.OWNER, TC.COLUMN_NAME, TC.DATA_TYPE,
                TC.DATA_DEFAULT, TC.NULLABLE, TC.COLUMN_ID, TC.DATA_LENGTH,
                TC.DATA_SCALE, TC.DATA_PRECISION, C.CONSTRAINT_TYPE, CC.POSITION
            FROM ALL_TAB_COLUMNS TC
            LEFT JOIN (ALL_CONS_COLUMNS CC JOIN ALL_CONSTRAINTS C
                ON (CC.CONSTRAINT_NAME = C.CONSTRAINT_NAME AND CC.TABLE_NAME = C.TABLE_NAME AND C.CONSTRAINT_TYPE = 'P'))
              ON TC.TABLE_NAME = CC.TABLE_NAME AND TC.COLUMN_NAME = CC.COLUMN_NAME
            WHERE "

au lieu de

Code:

        $sql = "SELECT TC.TABLE_NAME, TC.OWNER, TC.COLUMN_NAME, TC.DATA_TYPE,
                TC.DATA_DEFAULT, TC.NULLABLE, TC.COLUMN_ID, TC.DATA_LENGTH,
                TC.DATA_SCALE, TC.DATA_PRECISION, C.CONSTRAINT_TYPE, CC.POSITION
            FROM ALL_TAB_COLUMNS TC
            LEFT JOIN (ALL_CONS_COLUMNS CC JOIN ALL_CONSTRAINTS C
                ON (CC.CONSTRAINT_NAME = C.CONSTRAINT_NAME AND CC.TABLE_NAME = C.TABLE_NAME AND C.CONSTRAINT_TYPE = 'P'))
              ON TC.TABLE_NAME = CC.TABLE_NAME AND TC.COLUMN_NAME = CC.COLUMN_NAME
            JOIN ALL_TABLES TB ON (TB.TABLE_NAME = TC.TABLE_NAME AND TB.OWNER = TC.OWNER)
            WHERE UPPER(TC.TABLE_NAME) = UPPER(:TBNAME)";

La suppression de " JOIN ALL_TABLES TB ON (TB.TABLE_NAME = TC.TABLE_NAME AND TB.OWNER = TC.OWNER)" permet de requêter pour une vue.

A+

PS : la version 1.7.2 disponible actuellement contient bien le patch. 2 possibilités : tu n'as pas la 1.7.2 ou le problème est d'une autre nature.

Dernière modification par mikaelkael (07-01-2009 17:49:21)


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#8 08-01-2009 09:51:23

max
Nouveau membre
Date d'inscription: 14-09-2007
Messages: 8

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

Merci Mikael.

J'ai bien la v1.7.2 et j'ai toujours le problème.
Par contre, tu indiquais plus haut qu'il faut laisser '$_primary'.
Comme je n'en ai pas dans ma vue, je la remplace par quoi ??

...

Hors ligne

 

#9 08-01-2009 09:59:20

Fuggerbit
Membre
Date d'inscription: 17-12-2008
Messages: 54

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

Pour ma part le pb a été réglé avec la nouvelle version.
Vérifies que ce n'est pas juste un pb de majuscules, regarde les noms de colonnes qu'il te propose :
are not columns in this table (NOMS DE COLONNES).
Tu dois mettre le même nom que ce qu'il t'affiche, avec les mêmes majuscules/minuscules.
Peu importe si tu n'as pas de primary (c'est une vue, c'est normal) tu choisis toi même les champs qui la représentent, sinon tu mets tous tes champs comme ca même les doublons sont autorisés.

Dernière modification par Fuggerbit (08-01-2009 10:06:10)

Hors ligne

 

#10 08-01-2009 10:06:51

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

Hello,

En théorie, le premier champ de la vue suffit. Cependant si tu veux utiliser la méthode find(), il faut que tu choisisses les champs qui identifient une ligne de manière unique.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#11 08-01-2009 13:58:32

max
Nouveau membre
Date d'inscription: 14-09-2007
Messages: 8

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

Marche toujours pas ...

Le fait d'utiliser l'adaptater pdo_oci a-t-il un incident ?
(Ne n'arrive pas a me connecter à la base en utilisant l'adaptater oracle ...!?)

Hors ligne

 

#12 08-01-2009 14:09:46

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

Hello,

Non j'ai patché les 2 adaptateurs. Seulement comme le dit Fuggerbit, la casse de tes noms de table ou colonne est importante surtout si tu utilises les options autoQuoteIdentifier et caseFolding.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#13 08-01-2009 14:34:17

max
Nouveau membre
Date d'inscription: 14-09-2007
Messages: 8

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

Merci a tous les deux...

J'ai trouvé le problème.
Je n'attaque pas une vue en direct mais un synonyme.

j'ai un système de flip - flop et pour que les données soient toujours dispo, on change juste le synonyme pour pointer sur une vue ou une autre pendant des traitements un peu long ... bref...

Le nom de ma table est un synonyme et ça marche pas. Quand je met ma vue ça marche ...

Mikeal, une idée ???   smile

Hors ligne

 

#14 08-01-2009 17:45:01

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

Hello,

Le problème, c'est que le synonyme n'est pas décrit dans Oracle. Il n'y as pas de structure associée.

Il faut utiliser dans la doc le chapitre sur le cache des métadata, tu crées les métadata à partir de la table réelle et tu les associe au Zend_Db_Table de ton synonyme.

Voici les liens : http://www.mikaelkael.fr/doczf/fr/zend. … hardcoding
et http://www.mikaelkael.fr/doczf/fr/perfo … hardcoding

Il s'agit de mon site car le site officiel n'est pas à jour.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#15 08-01-2009 20:42:26

max
Nouveau membre
Date d'inscription: 14-09-2007
Messages: 8

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

J'ai qu'un mot à dire : MERCI !
Si jamais j'ai d'autres colles du genre ...
Faut dire que je suis encore débutant sur ZF ...
Demain à la première heure je metadata à fond ...
Max.

Hors ligne

 

#16 14-01-2009 11:37:52

max
Nouveau membre
Date d'inscription: 14-09-2007
Messages: 8

Re: [Zend_Db][1.7.1] Créer un Zend_Db_Table sur une Vue Oracle

ça marche ...

j'ai ajouté protected $metadata = array(...) à ma classe comme indiqué sur la doc (Cf. http://www.mikaelkael.fr/doczf/fr/zend. … hardcoding) .
Encore merci Mikael ... wink

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages