Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-06-2009 21:53:46

ted00
Membre
Date d'inscription: 02-06-2009
Messages: 23

[résolu] table jointe

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

Code:

<?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

Code:

<?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

Code:

<?php
class StoreGmap extends Zend_Db_Table_Abstract
{
    protected $_name = 'store_map'; /* nom de la table*/
}

Zend_debug::dump($store);

Code:

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

Code:

 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 

Code:

 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

 

#2 02-06-2009 23:28:05

yoga20
Membre
Date d'inscription: 23-04-2009
Messages: 33

Re: [résolu] table jointe

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

 

#3 02-06-2009 23:58:10

ted00
Membre
Date d'inscription: 02-06-2009
Messages: 23

Re: [résolu] table jointe

Merci.

Quand j'enlève mon array, j'avais des erreurs.

Donc j'ai mis les colonnes :

Code:

->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

 

#4 03-06-2009 08:24:24

mksoft
Nouveau membre
Date d'inscription: 24-03-2009
Messages: 9

Re: [résolu] table jointe

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

 

#5 03-06-2009 08:59:12

ted00
Membre
Date d'inscription: 02-06-2009
Messages: 23

Re: [résolu] table jointe

Bonjour,

Merci de l'info.

Mais j'ai une nouvelle erreur :

Code:

$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

Code:

 

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

 

#6 03-06-2009 10:52:42

ted00
Membre
Date d'inscription: 02-06-2009
Messages: 23

Re: [résolu] table jointe

Hello,

J'ai trouvé

Code:

$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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages