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

Zend_Db PHP Discussion :

Acces à la base / jointure


Sujet :

Zend_Db PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut Acces à la base / jointure
    bonsoir / bonjour
    apres avoir strictement suivi le tutoriel
    ftp://ftp-developpez.com/g-rossolini...d-by-yogui.pdf

    je me suis lancer dans la modification de site final produit par le tutoriel

    j'en arrive a quelques problèmes que je n'arrive pas a résoudre:

    => je créer une table catégorie
    => j'ajoute une champ Id_cat à Album (évidement) ce qui donne
    Categorie(id, Nom_Cat)
    Album(id,artist,title,Id_cat)

    l'idée serai (dans un premier temps) produire un affichage des champs suivants
    artist title Nom_Cat

    je pense faire une jointure

    dans l'état actuel des choses cela ressemble à peu prés à cela dans mon .phtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    foreach($this->Album as $album) : 
    echo $this->escape($Album->Artite);
    echo $this->escape($Album->title);
    	foreach($this->Categorie as $categorie) : 
    		if($categorie->id==$Album->Id_Cat)
    		{
    		echo $this->escape($categorie->Nom_Cat); 
    		}
    	endforeach
    endforeach
    extrait de code de mon indexcontrolleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $album = new Album();
    	$this->view->Album = $album->fetchAll();	
    	$categorie = new Categorie();
    	$this->view->Categorie = $categorie->fetchAll();
    je ne trouve pas cela très performant
    et cela risque de devenir ingérable
    j'ai essayer des choses de ce genre ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $select = $db->query('SELECT champ FROM table');
    $rows = $select->fetchAll();
    en vain car dans le tutoriel de référence le seul $db et défini dans zf-tutorial/index.php


    visiblement il y a quelque chose que je n'ai pas saisi si quelqu'un pouvait m'éclaircir cela
    merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 5
    Par défaut oui tu as droit à une réponse
    Salut,

    Si tu veux récupérer le nom de la catégorie, ta méthode me semble assez incorrecte, il faut penser que tu utilises un modèle MVC, le fait de rajouter un test dans ta vue (fichier phtml) sort du contexte du modèle. Il faut agir au niveau du Model, càd au niveau de ta classe Album. C'est à cet endroit que devront se faire toute les requêtes sql à la base de données. Si tu veux une liste des albums par catégorie, tu peux par exemple définir une fonction de la Classe Album que tu appeleras fetchByCategorie($id_cat).

    Pour ton problème, tu dois complèter la classe Album en redéfinissant la fonction fetchAll() comme ceci :
    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
     
    class Album extends Zend_Db_Table
    {
    protected $_name = 'album';
     
    public function fetchAll()
    	{
    		Zend_Loader::loadClass("Zend_Db_Select");
                    //récupération de la connexion à la db dans le "registre" de zend
    		$db = Zend_Registry::get("dbAdapter");
                    //création de la requête sql
    		$select = $db->select()
    		    ->from('album', 'album.id,artist,titre')
    		    ->from('categorie','Nom_Cat')
            	    ->where('album.Id_cat = categorie.id')
    		$stmt = $db->query($select);
    		//récupération du résultat
                    $result = $stmt->fetchAll();	
    		return $result;
    	}
    }
    et dans index.php moi j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // setup database
    $db = Zend_Db::factory($config->db->adapter,  $config->db->config->toArray());
    Zend_Db_Table::setDefaultAdapter($db);
    Zend_Registry::set('dbAdapter', $db);
    Zend_Registry::set('dbAdapter', $db); apparemment j'ai ceci en plus par rapport au tutoriel, ça me permet de récupérer le $db dans la classe Album.

    J'espère que ça t'aidera, désolé je ne suis pas encore spécialiste de Zend, ça ne fait que 2semaines que je tâte le terrain

    Bon courage

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Par défaut
    Je remonte ce poste car je bute sur le même problème :

    Je crois avoir comprit pour la redéfinition de la fonction fetchAll(), par contre comment composer la vue pour avoir un affichage du type

    Catégorie A
    --> Album1
    --> Album2
    --> Album3

    Catégorie B
    --> Album1
    --> Album2
    --> Album3
    ...

    edit : Au passage correction de la syntaxe ci dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $select = $db->select()
    		    ->from('album', array('album.id','artist','titre'))
    		    ->from('categorie','Nom_Cat')
            	    ->where('album.Id_cat = categorie.id')

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Par défaut
    Salut,

    Pour le message précédent je n'ai pas trouver d'autres solutions que celle de bobart c'est à dire deux foreach avec un if pour la "jointure".

    Donc si qqn à mieux ça m'intéresse.

    P.S. : Merci aux modos d'avoir fusionner les deux posts, je sais pas comment je me suis débrouiller hier ???

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

Discussions similaires

  1. Accès à la base de registre windows à distance
    Par xavame dans le forum Sécurité
    Réponses: 4
    Dernier message: 13/07/2005, 15h23
  2. [MFC] Accès à la base de registre
    Par Nybbas dans le forum MFC
    Réponses: 3
    Dernier message: 25/07/2003, 11h04
  3. Refus d'accès à une base Firebird
    Par severine dans le forum Installation
    Réponses: 18
    Dernier message: 04/06/2003, 16h03
  4. [Dev-C++] Accès à une base MySQL
    Par Beetlejuice dans le forum Dev-C++
    Réponses: 8
    Dernier message: 08/05/2003, 13h17
  5. [sgbd] Accès au base de données en Perl
    Par totox17 dans le forum SGBD
    Réponses: 3
    Dernier message: 24/02/2003, 16h05

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