Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 16-02-2009 22:34:18

Juroks
Nouveau membre
Date d'inscription: 16-02-2009
Messages: 6

Probleme affichage avec une Vue

Bonsoir tout le monde,

Voila j'ai mis en place une base de donnée Oracle avec Zend. Quand je sélectionne affiche modifié mes tables tout  ce passe très bien.

Mais quand je souhaite afficher une vue de ma base de donnée la pas pareil j'ai une erreur fatal.

/Base de donnée :

Voici le sql de ma vue :

CREATE OR REPLACE FORCE VIEW "GIVRY"."CLIENT1" ("NUMCLIENT", "NOM", "PRENOM", "ADRESSEPOSTALE", "DATEDENAISSANCE") AS
Select numClient, nomClient, prenomClient, adressePostale, dateDeNaissance from CLIENT;

dedans nous avons bien des données.

/Zend application :

Voici mon script index dans le dossier script/test/ :

<HTML>
<BODY LANG="fr-FR" BACKGROUND="/projetBD/isc/images/Marceau.png" DIR="LTR">

<P ALIGN=CENTER><FONT COLOR="#000000"<FONT SIZE=4 STYLE="font-size: 15pt"><B>Liste des Clients</B></FONT></FONT></P>
<BR><BR>

<P ALIGN=CENTER>
<table>
<table border="2">
<thead>
  <tr>
   <th>n° Client</th>
   <th>Nom</th>
    <th>Prenom</th>
    <th>Adresse Postale</th>
    <th>Date naissance</th>
  </tr>
</thead>
<tbody>
<?php

foreach ($this-> test as $liste) {
   echo '<tr><td>' . $liste-> NUMCLIENT.'</td>';
   echo ' <td>' . $liste-> NOM .'</td>';
   echo ' <td>' . $liste-> PRENOM .'</td>';
   echo ' <td>' . $liste-> ADRESSEPOSTALE .'</td>';
   echo ' <td>' . $liste-> DATEDENAISSANCE .'</td>';
   
}

?>
</table>
</tbody>
</table>
</P>
</BODY>
</HTML>

Mon Controler testControler :

<?php
class testController extends Zend_Controller_Action {
    public function init(){
        // chargement de la classe listedt
        Zend_Loader::loadClass('test');
        //on retrouve le registre global
        $registry= Zend_Registry::getInstance();
        // on mémorise l'adapteur
        $this->db=$registry->get('db');
    }
    // Action d'accueil
    function indexAction(){
        // on crée une instance de Listedt en passant l'adapteur en
        // paramètre du constructeur
        $b = new test($this->db);
        // obtenons un objet Zend_Db_Select
        $select= $b->select();
        $this->view->test=$b->fetchAll($select);
        $this->render();


    }
   

}
?>

Et enfin mon model qui je pense d'ou proviens mon erreur :

<?php
class test extends Zend_Db_Table_Abstract{
//nom du schéma sur le SGBD mySQL
protected $_schema='XE';
//nom de la table dans la base de données
protected $_name='GIVRY.CLIENT1';
//nom de la clé primaire de la table
protected $_primary='NUMCLIENT';


}
?>

Est ce que c'est pas le Zend_Db_Table_Abstract qui pose un probleme puisque je veux afficher une vue ?


Voici l'erreur afficher :
Uncaught exception 'Zend_Db_Table_Exception' with message 'Primary key column(s) (NUMCLIENT) are not columns in this table ()' in C:\wamp\www\projetBD\Zend\Db\Table\Abstract.php:660

Voila Merci a tout ceux qui pourront m'aider.

Hors ligne

 

#2 17-02-2009 08:18:06

Davjack
Membre
Date d'inscription: 06-02-2009
Messages: 32

Re: Probleme affichage avec une Vue

Hors ligne

 

#3 17-02-2009 09:06:43

Juroks
Nouveau membre
Date d'inscription: 16-02-2009
Messages: 6

Re: Probleme affichage avec une Vue

Je vais voir ça et je tiens au courant merci !

Hors ligne

 

#4 17-02-2009 09:39:13

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

Re: Probleme affichage avec une Vue

Hello,

Au vue de ton code, je me pencherais en premier sur les options de ton adaptateur : 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

 

#5 17-02-2009 11:23:07

Juroks
Nouveau membre
Date d'inscription: 16-02-2009
Messages: 6

Re: Probleme affichage avec une Vue

Même pas j'ai changer de version je suis passé a la version 1.7.5 et ma vue a était directement prise.

Donc bug dans l'adaptateur pour Oracle je suppose.


En tout cas merci pour l'aide sa sauve mon projet XD.

venant de Réseau j'ai pas beaucoup eu d'expérience dans le développement d'application en php, java et Zend et

Une solution pas mal.

Bonne journée.

Hors ligne

 

#6 17-02-2009 11:30:40

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

Re: Probleme affichage avec une Vue

Hello,

Tu avais une version avant 1.7.2 ?

A+


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

Hors ligne

 

#7 17-02-2009 12:12:54

Juroks
Nouveau membre
Date d'inscription: 16-02-2009
Messages: 6

Re: Probleme affichage avec une Vue

apparemment oui !

j'ai réutilise le Zend que je possédais lorsque nous avons eu les cours d'initiation en novembre

Hors ligne

 

#8 17-02-2009 17:29:32

freeseb
Nouveau membre
Date d'inscription: 17-02-2009
Messages: 3

Re: Probleme affichage avec une Vue

Bonjour Juroks,

Zend_Db_Table_Abstract à besoin absolument d'une clé primaire existante et comme pour une vue on ne peut pas définir une PrimaryKey (en tout cas pour MySQL) et c'est ton cas il faut la forcer.

Quand tu fais

Code:

protected $_primary="maClePrimaire"

Tu soulage simplement ZF dans sa découverte de la table car ZF réalise un DescribeTable pour découvrir les paramètres de la table et comme il ne trouve pas de PrimaryKey sur ta vue, tu as beau lui dire le code précédent, il s'en moque.

Donc on modifie le comportement normal de ZF comme si dessous

@+


Code:

<?php

/**
 * 
 * @package application
 * @subpackage models
 * 
 * fichier TMavue.php
 *
 */


class TMavue extends Zend_Db_Table_Abstract
{
    protected $_name = 'nomvue'; /* nom de la vue */
    
    /*
    - But : utiliser une Vue comme modèle de données, mais...
    - Zend_Db_Table ne peut être utilisé si il n'existe pas de clé primaire
    - Comme on ne peut pas définir de clé primaire à une vue pour MySQL ou autre SGBD
    - Je force la méthode _setupPrimaryKey de la classe Zend_Db_Table_Abstract en lui donnant une clé primaire 
    - Définition : _setupPrimaryKey() donne le nom de la clé primaire par défaut en cherchant dans describeTable(); 
        vérifie que la clé primaire fait bien partie du tableau $_cols. 
    - En redéfinissant cette méthode, vous pouvez spécifier une clé primaire manuellement.
    */
    
    protected function _setupPrimaryKey()
    {
        $this->_primary = 'id_MaClePrimaire';
        parent::_setupPrimaryKey();
    }
    
}

?>

Hors ligne

 

#9 17-02-2009 17:42:56

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

Re: Probleme affichage avec une Vue

Hello,

freeseb a écrit:

Tu soulage simplement ZF dans sa découverte de la table car ZF réalise un DescribeTable pour découvrir les paramètres de la table et comme il ne trouve pas de PrimaryKey sur ta vue, tu as beau lui dire le code précédent, il s'en moque.

Non, non, il s'en moque pas du tout.

freeseb a écrit:

Code:

<?php

/**
 * 
 * @package application
 * @subpackage models
 * 
 * fichier TMavue.php
 *
 */

class TMavue extends Zend_Db_Table_Abstract
{
    protected $_name = 'nomvue'; /* nom de la vue */
    
    /*
    - But : utiliser une Vue comme modèle de données, mais...
    - Zend_Db_Table ne peut être utilisé si il n'existe pas de clé primaire
    - Comme on ne peut pas définir de clé primaire à une vue pour MySQL ou autre SGBD
    - Je force la méthode _setupPrimaryKey de la classe Zend_Db_Table_Abstract en lui donnant une clé primaire 
    - Définition : _setupPrimaryKey() donne le nom de la clé primaire par défaut en cherchant dans describeTable(); 
        vérifie que la clé primaire fait bien partie du tableau $_cols. 
    - En redéfinissant cette méthode, vous pouvez spécifier une clé primaire manuellement.
    */
    
    protected function _setupPrimaryKey()
    {
        $this->_primary = 'id_MaClePrimaire';
        parent::_setupPrimaryKey();
    }
    
}

?>

Ce n'est absolument pas nécessaire, tu utilises peut-être une version ancienne de ZF. Car la première étape de Zend_Db_Table_Abstract::_setupPrimaryKey, c'est :

Code:

protected function _setupPrimaryKey()
{
    if (!$this->_primary) {
    ...
    }
    // ensuite une série de tests de validité

A+

Dernière modification par mikaelkael (17-02-2009 17:44:15)


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

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