Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-04-2013 18:51:35

kev_9339
Nouveau membre
Date d'inscription: 02-04-2013
Messages: 1

Base de données

Bonjour, j'essaie de connecter une base de données avec mon site, ce que j'ai réussi à faire. Cependant, je suis seulement capable d’interagir avec une seule table à la fois. J'ai essayer plusieurs choses afin de pouvoir communiquer avec deux table à la fois, soit faire un «joint», mais sans succès. Voici ce que j'ai fais pour afficher les données:

POUR LE MODULE:

Code:

//getAutoloaderConfig()...getConfig()....

 public function getServiceConfig(){
        return array(     
            'factories' => array(
                'Application\Model\ProjectModel' =>  function($sm) {
                    $tableGateway = $sm->get('ProjectTableGateway');
                    $table = new ProjectModel($tableGateway);
                    return $table;
                },
                'ProjectTableGateway' => function ($sm) {
                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                    $resultSetPrototype = new ResultSet();
                    $resultSetPrototype->setArrayObjectPrototype(new ProjectObject());
                    return new TableGateway('project', $dbAdapter, null, $resultSetPrototype);
                },
            ),
        );
    }

POUR LE MODEL:

Code:

namespace Application\Model;
//Certains «use» sont à effacer, ils sont inutiles;
use Zend\Db\TableGateway\TableGateway;
use Zend\Db\Adapter\Adapter;
use Zend\Db\Adapter\AdapterAwareInterface;

use Zend\Db\Sql\Sql,
      Zend\Db\Sql\Where,
      Zend\Db\Sql\Select;
use Zend\Db\ResultSet\ResultSet;

class ProjectModel extends TableGateway {
    protected $tableGateway;

        public function __construct (TableGateway $tableGateway){
        $this->tableGateway = $tableGateway;
    }

       public function getProject($id){
              $id = (int)$id;
        $rowset = $this->tableGateway->select(array('pro_id' => $id));    
        $result = $rowset->current();
        if(!$result){
            throw new \Exception("Could not find row $id");
        }
        return $result;
       }

}

MA QUESTION:
Que dois-je changer afin de pouvoir faire un «joint»?

Hors ligne

 

#2 05-04-2013 09:36:17

YannickDa
Membre
Date d'inscription: 05-04-2013
Messages: 29
Site web

Re: Base de données

Salut,

Si tu souhaites absolument utiliser le TableGateway, alors tu dois procéder ainsi :

Code:

...
use Zend\Db\Sql\Select;
...
public function getProject($id) {
    $id = (int)$id;
    $rowset = $this->tableGateway->select(function (Select $select) use ($id) {
        $select->join(array('alias' => 'table2'), 'table1.id = table2.id');
        $select->where(array('pro_id' => $id));
    });
    ....
}
...

@+

Dernière modification par YannickDa (05-04-2013 09:37:26)

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