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
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 :calim2:
Bon courage ;)