Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
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 22/01/2011, 13h49   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 12
Points : 2
Points : 2
Par défaut jointure de table avec Zend Framework

Bonjour,

je débute dans le système MVC et également dans zend framework

j'ai une petite application php avec une db, dans cette db j'ai deux tables
une table appelé ami et l'autre commande

j'ai déjà réussi à faire des requêtes qui affichait simplement les enregistrement de la table ami, et également à affiner avec des clauses where

ce que je voudrai faire maintenant, c'est réaliser une jointure des deux tables pour afficher les amis qui ont des commandes dans la table commande. Mais là je suis perdu

voici mon code :

page IndexController.php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
	public function clientAction()
	{
		$this->view->title = "Liste des amis ayant des commandes en cours";
		$amis = new Ami();
		$commande = new Commande();
		$select = $amis->select('nom')
		->from('ami')
		->join('commande','commande.idAmi = ami.id');
		$this->view->clients = $amis->fetchAll($select);
 
 
 
	}
la page client.phtml

Code :
1
2
3
4
 
<?php foreach($this->clients as $client) :?>
	<p><?php echo $client->nom;?></p>
<?php endforeach;?>
la page models/Ami.php

Code :
1
2
3
4
5
6
7
8
9
 
<?php
 
class Ami extends Zend_Db_Table
{
    protected $_name = 'ami';
    protected $_primary	= 'id';
}
?>
la page models/Commande.php

Code :
1
2
3
4
5
6
7
8
9
 
<?php
 
class Commande extends Zend_Db_Table
{
    protected $_name = 'commande';
    protected $_primary	= 'id';
}
?>



et pour finir la page index.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
<?php
 
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
date_default_timezone_set('Europe/Paris');
 
// mise en place des répertoires et chargement des classes
set_include_path('.'
    . PATH_SEPARATOR . './library'
    . PATH_SEPARATOR . './application/models/'
    . PATH_SEPARATOR . get_include_path());
 
 
include "Zend/Loader.php";
 
 
Zend_Loader::registerAutoload();
//on définit un nouvel objet de configuration
$oConfig = new Zend_Config_Ini('./application/config.ini', 'connexion');
// Mise en place de la BDD
$oDb = Zend_Db::factory($oConfig->db);
// on définit notre objet de base de données par défaut
Zend_Db_Table::setDefaultAdapter($oDb);
 
 
// setup controller
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);
$frontController->setControllerDirectory('./application/controllers');
 
// on définit le chemin des layouts
$aOptions = array(
    'layout'     => 'home',
    'layoutPath' => './application/layouts'
);
Zend_Layout::startMvc($aOptions);
 
// run!
$frontController->dispatch();
?>

pour l'instant je teste en tapant simplement l'url monsite/index/client
mais j'ai un message d'erreur

Citation:
Fatal error: Uncaught exception 'Zend_Db_Table_Select_Exception' with message 'Select query cannot join with another table' in C:....
leon86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2011, 18h15   #2
Membre régulier
 
Inscription : juin 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 66
Points : 86
Points : 86
Il faut mettre "->setIntegrityCheck(false)".

Code :
1
2
3
		$select = $amis->select('nom')->setIntegrityCheck(false)
		->from('ami')
		->join('commande','commande.idAmi = ami.id');
Blount est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2011, 18h32   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 12
Points : 2
Points : 2
salut,

un grand merci ca fonctionne, mais seulement j'ai remarqué que c'est toujours le champ 'nom' qui est récupérée même si j'indique un autre champ

comment choisir plusieurs champ? faut-il utiliser un tableau?
leon86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2011, 20h13   #4
Membre régulier
 
Inscription : juin 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 66
Points : 86
Points : 86
En fait, on ne ne met les noms de champs dans la méthode "select", mais dans la méthode "from".

Code :
1
2
3
		$select = $amis->select()->setIntegrityCheck(false)
		->from('ami', array('nom', 'prenom', 'autre'))
		->join('commande','commande.idAmi = ami.id');
Par défaut, il récupère tous les champs de la table (si tu ne précises pas).

Même fonctionnement dans les jointures. Le troisième paramètre peut service à spécifier les champs.
Blount est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2011, 14h13   #5
Invité de passage
 
Inscription : janvier 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 12
Points : 2
Points : 2
ok, encore merci
leon86 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 02h37.


 
 
 
 
Partenaires

Hébergement Web