Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Db
Zend_Db Forum d'entraide pour le composant Zend_Db du Zend Framework (création de requêtes, abstraction, ORM etc.). Avant de poster -> FAQ Zend_Db.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/07/2007, 23h19   #1
Invité de passage
 
Inscription : mars 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 4
Points : 3
Points : 3
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 :
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 :
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 :
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
bobart est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 22h30   #2
Invité de passage
 
Inscription : octobre 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 5
Points : 2
Points : 2
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 :
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 :
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
AzAt0th est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 14h21   #3
Membre à l'essai
 
Inscription : juillet 2007
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 38
Points : 24
Points : 24
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 :
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')
FredPont est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 09h14   #4
Membre à l'essai
 
Inscription : juillet 2007
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 38
Points : 24
Points : 24
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 ???
FredPont est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h17.


 
 
 
 
Partenaires

Hébergement Web