j'ai regarder sur phpmyadmin, j'ai effectivement mis un INDEX, pour le test cela dérange pas si le l'enlève, je le mettrais plus tard dans le modèle.Code:
1
2 car apparement nom constitue une clé également:
Version imprimable
j'ai regarder sur phpmyadmin, j'ai effectivement mis un INDEX, pour le test cela dérange pas si le l'enlève, je le mettrais plus tard dans le modèle.Code:
1
2 car apparement nom constitue une clé également:
ok, mais n'oublie de corriger le nom de ta classe admin dans le modèle de table Image!
pourquoi on met un "s" à id_users, mon chams s'appelle id_userCode:
1
2
3
4
5
6 'Admin' => array( 'columns' => 'id_user', 'refTableClass' => 'Model_Table_DbTable_Admin', 'refColumns' => 'id_user' ) );
c'est parque ce que j'ai mis?
si je met toto ca sera toto?Code:
1
2 $users = $admin->fetchAll($sql);
Code:
1
2 $toto = $admin->fetchAll($sql);
non, ils'agit d'une erreur de ma part, tu dois prendre le nom de ta clé tel qu'il est écris dans ta base!
Code:
1
2
3
4
5
6 'Admin' => array( 'columns' => 'id_user', 'refTableClass' => 'Model_Table_DbTable_Admin', 'refColumns' => 'id_user' ) );
j'ai donc changer dans le modèle Image la partie refTableClasse,et effacer l'index "nom"
J'ai mis des alisas en plus, et j'ai rajouter un try catch sur le fetchAll()Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class Application_Model_DbTable_Image extends Zend_Db_Table_Abstract { protected $_name = 'image'; protected $_primary = array('id_image'); /* * Références (FK) */ protected $_referenceMap = array( //// Référence à la table "Admin" 'Admin' => array( 'columns' => 'id_user', 'refTableClass' => 'Application_Model_Table_DbTable_Admin', 'refColumns' => 'id_user' ) ); }
voici l'erreurCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public function indexAction() { $admin = new Application_Model_DbTable_Admin(); $sql = $admin->select() ->from(array('A' => 'admin'), array('A.id_user', 'A.nom', 'A.droit')) ->join(array('I' => 'image'), 'A.id_user=I.id_user', array('I.id_image', 'I.id_user', 'I.url')); try { $user = $sql->fetchAll($sql); } catch (Exception $e) { echo $e; } foreach ($user as $reponse) { echo $reponse -> nom; } }
il y a encore un souci avec mon modèle Image? , et mon modèle Admin il n'y pas pas besoin de le modifier?
Code:
1
2
3
4
5
6
7
8
9
10 class Application_Model_DbTable_Admin extends Zend_Db_Table_Abstract { //variable qui encapsule le nom de la table protected $_name = 'admin'; //varitable qui encapule la clef primaire de la table admin protected $_primary = array('id_user'); }
quel est le message d'erreur qui s'affiche???
je ne l'avais pas vu dans ton post précédent!
j'avais oublié de le mettre :ccool:
Code:
1
2
3
4
5
6
7
8 exception 'Zend_Db_Select_Exception' with message 'Unrecognized method 'fetchAll()'' in C:\wamp\ZendFramework\library\Zend\Db\Select.php:1332 Stack trace: #0 C:\wamp\www\testzend\application \controllers\IndexController.php(16): Zend_Db_Select->__call('fetchAll', Array) #1 C:\wamp\www\testzend\application\controllers\IndexController.php(16): Zend_Db_Table_Select->fetchAll(Object(Zend_Db_Table_Select)) #2 C:\wamp\ZendFramework\library\Zend\Controller\Action.php(513): IndexController->indexAction() #3 C:\wamp\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('indexAction') #4 C:\wamp\ZendFramework\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #5 C:\wamp\ZendFramework\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch() #6 C:\wamp\ZendFramework\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() #7 C:\wamp\www\testzend\public\index.php(25): Zend_Application->run() #8 {main}
pourquoi fais tu :
????Code:
1
2 $sql->fetchAll($sql);
ce ne serait pas plutôt:
Code:
1
2 $db->fetchAll($sql);
j'ai donc modifier $db->fetchAll($sql) par contre écran blanc, pas d'erreur il y a rien de marqué,
comment je peu faire afficher la requête en brut pour la testé sur phpmyadmin, j'ai essayer avec un echo $user mais il n'y rien ??
voici le script complet du controllerCode:
1
2
3
4 $user = $db->fetchAll($sql); echo $user; echo $sql;
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 <?php class IndexController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ } public function indexAction() { $admin = new Application_Model_DbTable_Admin(); $sql = $admin->select() ->from(array('A' => 'admin'), array('A.id_user', 'A.nom', 'A.droit')) ->join(array('I' => 'image'), 'A.id_user=I.id_user', array('I.id_image', 'I.id_user', 'I.url')); $user = $db->fetchAll($sql); echo $user; try { foreach ($user as $reponse) { echo $reponse->id_user;//table Admin echo $reponse->nom;//table Admin echo $reponse->url;//table Image } } catch (Exception $e) { echo $e; } } }
j'ai fait un
null ?? comment cela se fait t'il ?Code:
1
2 Zend_Debug::dump($db);
c'est qu'il n'est initialisé nulle part!
$db correspond à l'objet de connection à ta base, un moyen de le récupérer:
ou bien:Code:
1
2
3 $modelAdmin = new Application_Model_DbTable_Admin(); $db = $modelAdmin->getDefaultAdapter();
Code:
1
2 $db = Zend_Registry::get('db'); // si tu l'as appelé ainsi dans ton bootstrap
Pour afficher ta requête, tu peux faire:
Code:
1
2 Zend_Debug::dump($sql->assemble());
Ce que je ne comprend pas, c'est que avant avec ce script cela fonctionnait sans intiliser la connection à la base, ce script n'avais pas d'erreur ?? c'est curieux car sans bdd il me mettrai une grosse erreur, ou qu'il nest pas necessaire d'appeller $db pour faire une requête?Code:
1
2
3 c'est qu'il n'est initialisé nulle part! $db correspond à l'objet de connection à ta base
bon maintenant j'ai donc fait appelle a $db, j'ai mis la premiere solution, pour la deuxième je ne sais pas car il n'y rien dans mon boostrapCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class IndexController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ } public function indexAction() { $admin = new Application_Model_DbTable_Image(); $users=$admin->fetchAll(); foreach($users as $user) { echo $user->url;//affiche bien l'url } } }
ce code dans le controller ne me génère rien écran blanc ?? pas d'erreur en vu, pas de requête brute visible?Code:
1
2
3
4
5
6
7 <?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }
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 class IndexController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ } public function indexAction() { $modelAdmin = new Application_Model_DbTable_Admin(); $db = $modelAdmin->getDefaultAdapter(); //Zend_Debug::dump($db); //ici je vois l'objet $db si je décommente $sql = $ModelAdmin->select() ->from(array('A' => 'admin'), array('A.id_user', 'A.nom', 'A.droit')) ->join(array('I' => 'image'), 'A.id_user=I.id_user', array('I.id_image', 'I.id_user', 'I.url')); $db->fetchAll($sql); Zend_Debug::dump($sql->assemble()); Zend_Debug::dump($sql); foreach ($user as $reponse) { echo $reponse->id_user; echo $reponse->nom; echo $reponse->url; } } }
Bonjour,
dans ton controleur tu as oublié d'instancier le résultat de ta requête ($user), essayes:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public function indexAction() { $modelAdmin = new Application_Model_DbTable_Admin(); $db = $modelAdmin->getDefaultAdapter(); //Zend_Debug::dump($db); //ici je vois l'objet $db si je décommente $sql = $ModelAdmin->select() ->from(array('A' => 'admin'), array('A.id_user', 'A.nom', 'A.droit')) ->join(array('I' => 'image'), 'A.id_user=I.id_user', array('I.id_image', 'I.id_user', 'I.url')); $user = $db->fetchAll($sql); Zend_Debug::dump($sql->assemble()); Zend_Debug::dump($sql); foreach ($user as $reponse) { echo $reponse->id_user; echo $reponse->nom; echo $reponse->url; } }
Faudrait revoir ça déjà
C'est abérant d'utiliser le modèle admin et de faire un from sur la table admin, il vous faudrait revoir les requête sous zendCode:
1
2
3 $sql = $ModelAdmin->select() ->from(array('A' => 'admin'), array('A.id_user', 'A.nom', 'A.droit')) ->join(array('I' => 'image'), 'A.id_user=I.id_user', array('I.id_image', 'I.id_user', 'I.url'));
Monsieur ou Madame 5h4rk a raison!
alors pour revenir sur ma réponse, en se basant sur la doc officielle:
Est-ce mieux? je ne voudrais pas induire keokaz en erreur.....Code:
1
2
3
4
5
6 $sql = $db->select() ->from(array('A' => 'admin'), array('A.id_user', 'A.nom', 'A.droit')) ->join(array('I' => 'image'), 'A.id_user=I.id_user', array('I.id_image', 'I.id_user', 'I.url')); $stmt = $db->query($sql); $user = $stmt->fetchAll();
Cela est mieux mais pourquoi n'utilise t il pas son modèle Application_Model_DbTable_Admin ou tout serait fait à l'intèrieur ce qui serait bien mieux
merci de m'avoir aidé :)
j'ai finalement fusionner les 2 tables je sais que c'est bas le mieux comme solution :aie:
j'ai vu qu'on pouvais utiliser doctrine sur Zend, je vais plutôt me concentrer sur ça car je trouve très pratique je l'avais déjà vu avec symfony.
merci encore
Ah ben si tu trouve doctrine mieux pour zend bonne chance à toi
merci :)