Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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:
//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:
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
Salut,
Si tu souhaites absolument utiliser le TableGateway, alors tu dois procéder ainsi :
...
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