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