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