Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Étant novice dans zend, je cherche à récupérer les enregistrements d'une table jointe, mais je n'arrive qu'à avoir les enregistrements de ma table sélectionnée.
Voici mes différents fichiers :
IndexController.php
<?php class IndexController extends Zend_Controller_action { function indexAction() { $this->view->title = "Home | Equidurable"; $store = new Stores(); $this->view->stores = $store->fetchAll(); } public function moreAction () { $this->view->title = "Store details | Equidurable"; $db = new Stores(); $id = (int)$this->_request->getParam('id'); $select = $db->select()->setIntegrityCheck(false) ->from('stores','*') ->join('store_map', 'stores.store_id = store_map.store_id', array()) ->where('stores.store_id = ?', $id); $store = $db->fetchAll($select); Zend_Registry::get('Firebug')->log($select, Zend_Log::INFO); $this->view->stores = $db->fetchAll($select); $rowCount = count($db); if ($rowCount > 0) { echo "$rowCount rows trouvés'<br><br>"; $rowsetArray = $store->toArray(); $rowCount = 1; foreach ($rowsetArray as $rowArray) { echo "row #$rowCount:\n"; foreach ($rowArray as $column => $value) { echo "\t$column => $value\n <br>"; } ++$rowCount; echo "\n <br><br>"; } echo "<br/><hr/><br/><b>select : </b>".$select."<br/><hr/><br/>"; Zend_debug::dump($store); } else { echo 'Désolé, il n\'y a pas de résultat pour cette requête'; } } ?>
models :
stores.php
<?php class Stores extends Zend_Db_Table_Abstract { protected $_name = 'stores'; /* nom de la table*/ protected $_primary = 'store_id'; protected $_dependentTables = array('store_map'); }
StoreGmap.php
<?php class StoreGmap extends Zend_Db_Table_Abstract { protected $_name = 'store_map'; /* nom de la table*/ }
Zend_debug::dump($store);
object(Zend_Db_Table_Rowset)#30 (10) { ["_data:protected"] => array(1) { [0] => array(18) { ["store_id"] => string(1) "1" ["store_name"] => string(26) "- Magasin du monde 1" ["store_ad"] => string(15) " bd de xxx" ["store_cp"] => string(4) "1000" ["store_town"] => string(9) "Bruxelles" ["store_province"] => string(9) "Bruxelles" ["store_tel"] => string(8) "00000" ["store_fax"] => NULL ["store_web"] => string(20) "www.test.be" ["store_mail"] => NULL ["store_opening_hours"] => NULL ["store_closing_hours"] => NULL ["store_eval"] => NULL ["store_comantary"] => string(213) "Ils proposent une énorme quantité de produits uniquement ..... ." ["store_ins_date"] => string(19) "2009-05-29 22:05:41" ["store_tasting"] => string(1) "0" ["store_web_sales"] => string(1) "0" ["store_publish"] => string(1) "1" } } ...
SELECT
SELECT `stores`.* FROM `stores` INNER JOIN `store_map` ON stores.store_id = store_map.store_id WHERE (stores.store_id = 1)
Enfaite, je n'arrive pas a avoir les données de la table store_map, alors que mon select est bon quand il se présente comme suit
SELECT * FROM `stores` INNER JOIN `store_map` ON stores.store_id = store_map.store_id WHERE (stores.store_id = 1)
Quelqu'un aurait-il une idée pour supprimer le `stores`. dans le SELECT .
Merci d'avance,
Ted
Dernière modification par ted00 (03-06-2009 10:53:25)
Hors ligne
Je pense que ton problème viens de "SELECT `stores`.*" ,pour pouvoir aussi sélectionner les colonnes de ta table store_map il faudrait que tu rajoutes le nom de tes champs à la place de array () dans ton ->join('store_map', 'stores.store_id = store_map.store_id', array())
Hors ligne
Merci.
Quand j'enlève mon array, j'avais des erreurs.
Donc j'ai mis les colonnes :
->join('store_map', 'stores.store_id = store_map.store_id', 'store_map.store_map_lat', 'store_map.store_map_long')
et maintenant j'ai une erreur :
Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.`store_map` ON stores.store_id = store_map.store_id WHERE (stores.store_id = 1)' at line 2' in C:\wamp\www\monsite\library\Zend\Db\Statement\Pdo.php:238 Stack trace: #0 C:\wamp\www\monsite\library\Zend\Db\Statement.php(283): Zend_Db_Statement_Pdo->_execute(Array) #1 C:\wamp\www\monsite\library\Zend\Db\Adapter\Abstract.php(433): Zend_Db_Statement->execute(Array) #2 C:\wamp\www\monsite\library\Zend\Db\Adapter\Pdo\Abstract.php(230): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Table_Select), Array) #3 C:\wamp\www\monsite\library\Zend\Db\Table\Abstract.php(1330): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Table_Select)) #4 C:\wamp\www\monsite\library\Zend\Db\Table\Abstract.php(1158): Zend_Db_Table_Abstract->_fetch(Object(Zend_Db_Table_ in C:\wamp\www\monsite\library\Zend\Db\Statement\Pdo.php on line 238
Merci de l'aide.
Ted
Hors ligne
Bonjour,
a priori dans la porjection de ton select, tu ne retournes que les champs de 'stores' et pas ceux de 'store_map'
pour mes jointures , je procède ainsi :
$select = $this->select()
->from(array("a" => "materiels"))
->join(array("b" => $tab),"a.id=b.id")
->where("a.id = ?",$id)
->setIntegrityCheck(false);
$tab étant le nom de la table passée en paramètre
la requête généree ressemble à ça :
SELECT `a`.*, `b`.* FROM `materiels` AS `a` INNER JOIN `avants` AS `b` ON a.id=b.id WHERE (a.id=1)
a+
mk
Hors ligne
Bonjour,
Merci de l'info.
Mais j'ai une nouvelle erreur :
$select = $db->select() ->from(array("stores" => "stores")) ->join(array("store_map" => $tab),"stores.store_id=store_map.store_id") ->where("stores.store_id = ?",$id) ->setIntegrityCheck(false);
et l'erreur
Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[42000]: Syntax error or access violation: 1103 Incorrect table name ''' in C:\wamp\www\monsite\library\Zend\Db\Statement\Pdo.php:238 Stack trace: #0 C:\wamp\www\monsite\library\Zend\Db\Statement.php(283): Zend_Db_Statement_Pdo->_execute(Array) #1 C:\wamp\www\monsite\library\Zend\Db\Adapter\Abstract.php(433): Zend_Db_Statement->execute(Array) #2 C:\wamp\www\monsite\library\Zend\Db\Adapter\Pdo\Abstract.php(230): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Table_Select), Array) #3 C:\wamp\www\monsite\library\Zend\Db\Table\Abstract.php(1330): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Table_Select)) #4 C:\wamp\www\monsite\library\Zend\Db\Table\Abstract.php(1158): Zend_Db_Table_Abstract->_fetch(Object(Zend_Db_Table_Select)) #5 C:\wamp\www\monsite\application\controllers\IndexController.php(48): Zend_Db_Table_Abstract->fetchAll(Object(Zend_Db_Table_Select)) #6 C:\wamp\www\monsite\library\Zend\Controller\Action in C:\wamp\www\monsite\library\Zend\Db\Statement\Pdo.php on line 238
Merci de l'aide.
Ted
Hors ligne
Hello,
J'ai trouvé
$select = $db->select() ->from('stores','*') ->join('store_map', 'stores.store_id = store_map.store_id') ->where('stores.store_id = ?', $id) ->setIntegrityCheck(false);
Merci à tous,
Ted
Hors ligne