Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
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+
Hors ligne
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?
Hors ligne
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
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+
Hors ligne
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)" ...
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
Hello,
Pour être sûr, va dans le fichier /library/Zend/Db/Adapter/Oracle.php et ligne 290, tu dois avoir :
$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
$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)
Hors ligne
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
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
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+
Hors ligne
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
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+
Hors ligne
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 ???
Hors ligne
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+
Hors ligne
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
ç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 ...
Hors ligne
Pages: 1