Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
salut,
je viens de commencer avec zend framework 3, je me suis de cette tutorial https://docs.zendframework.com/tutorial … d-models/, tout va tres bien, tout marche correctement. le probleme est que qunad je essaye de faire une requete entre plusieurs table galere je ne sais pas d'ou vienne mes erreur. par exemple j'ai 2 tables: t_clients (cl_id, name_cl,contant) et t_commands (cmd_id,date_cmd,cl_id), avec cl_id comme cle etrangere dans la table commands.
donc, l'idee est d'afichier la liste des commandes avec les noms des clients par ordre decroissant de la date de commands (date_cmd).
aidez moi svp! je utilise zend-db, j'ai essaye pas mal de tuto et forums mais je ne pas trouver la solution.
voila le fichier Telimani/src/Model/CommadsTable.php
[lang=php]<?php namespace Telimani\Model; use RuntimeException; use Zend\Db\Adapter\Adapter; use Zend\Db\Adapter\AdapterInterface; use Zend\Db\TableGateway\TableGatewayInterface; use Zend\Db\ResultSet\ResultSet; //use Zend\Db\Sql\Select; //use Zend\Db\Sql\Sql; use Zend\Db\TableGateway\TableGateway; use Zend\Paginator\Adapter\DbSelect; use Zend\Paginator\Paginator; class CommandsTable { private $tableGateway; public function __construct(TableGatewayInterface $tableGateway) { $this->tableGateway = $tableGateway; } /* public function __construct(AdapterInterface $adapter) { $this->adapter = $adapter; }*/ public function fetchAll() { // $db=Zend_Db_Table_Abstract::getDefaultAdapter(); //$db->setFetchMode(Zend_Db::FETCH_OBJ); /*$resultSet = $this->adapter->query('SELECT * FROM `commands` WHERE `cmd_id` => 2', array(2)); return $resultSet;*/ /*$sql = new Sql($this->tableGateway->getAdapter()); $select = $sql->select(); $Select ->from('commands'); $result = $this->tableGateway->select($select); return $result;*/ //$sql=query('SELECT * FROM commands WHERE cmd_id => 2'); $resultSet = $this->tableGateway->query('SELECT * FROM `user` WHERE `id` = ?', [2]); return $resultSet; //return $this->tableGateway->select(); } }
le fichier Telimani/src/Controller/CommadsController.php
[lang=php] <?php namespace Telimani\Controller; use Telimani\Form\CommandsForm; use Telimani\Model\Commands; use Telimani\Model\CommandsTable; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; class CommandsController extends AbstractActionController { // Add this property: private $table; // Add this constructor: public function __construct(CommandsTable $table) { $this->table = $table; } public function indexAction() { return new ViewModel([ 'commands' => $this->table->fetchAll(), ]); } }
fichier Telimani/src/Modele.php
[lang=php] <?php namespace Telimani; use Zend\Db\Adapter\Adapter; use Zend\Db\Adapter\AdapterInterface; use Zend\Db\ResultSet\ResultSet; //use Zend\Db\Sql\Select; //use Zend\Db\Sql\Sql; use Zend\Db\TableGateway\TableGateway; use Zend\ModuleManager\Feature\ConfigProviderInterface; class Module implements ConfigProviderInterface { // getConfig() method: public function getConfig() { return include __DIR__ . '/../config/module.config.php'; } // getServiceConfig method: public function getServiceConfig() { return [ 'factories' => [ //module for commands Model\CommandsTable::class => function($container) { $adapter = $container->get(Model\CommandsTableGateway::class); return new Model\CommandsTable($adapter); }, Model\CommandsTableGateway::class => function ($container) { $dbAdapter = $container->get(AdapterInterface::class); $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new Model\Commands()); return new TableGateway('commands', $dbAdapter, null, $resultSetPrototype); }, ], ]; } // getControllerConfig method: public function getControllerConfig() { return [ 'factories' => [ // ControllerConfig pour AboutController Controller\CommandsController::class => function($container) { return new Controller\CommandsController( $container->get(Model\CommandsTable::class) ); }, //end ], ]; } }
fichier Telimani/config/module.config.php
[lang=php] <?php namespace Telimani; use Zend\Router\Http\Segment; //use Zend\ServiceManager\Factory\InvokableFactory; return [ /*'controllers' => [ 'factories' => [ Controller\AlbumController::class => InvokableFactory::class, ], ], */ // The following section is new and should be added to your file: 'router' => [ 'routes' => [ //new route to controller contact 'commands' => [ 'type' => Segment::class, 'options' => [ 'route' => '/commands[/:action[/:cmd_id]]', 'constraints' => [ 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 'cmd_id' => '[0-9]+', ], 'defaults' => [ 'controller' => Controller\CommandsController::class, 'action' => 'index', ], ], ], //end route ], ], //======== 'navigation' => [ 'default' => [ [ 'label' => 'Home', 'route' => 'home', ], //menu access to contact controller [ 'label' => 'Commands', 'route' => 'commands', 'pages' => [ [ 'label' => 'Add', 'route' => 'commands', 'action' => 'add', ], [ 'label' => 'Edit', 'route' => 'commands', 'action' => 'edit', ], [ 'label' => 'Delete', 'route' => 'commands', 'action' => 'delete', ], ], ], ], ], 'view_manager' => [ 'template_path_stack' => [ 'telimani' => __DIR__ . '/../view', ], ], ];
fichier config/autoload/global.php
[lang=php] <?php /** * Global Configuration Override * * You can use this file for overriding configuration values from modules, etc. * You would place values in here that are agnostic to the environment and not * sensitive to security. * * @NOTE: In practice, this file will typically be INCLUDED in your source * control, so do not include passwords or other sensitive information in this * file. */ return array( 'db' => array( 'driver' => 'Pdo', 'dsn' => "pgsql:host=localhost;dbname=db_fastfoods", 'username' => 'milano', 'password' => 'cheva7', ), );
votre aide serra la bienvenue,
merci!
Dernière modification par ktraore (22-08-2017 23:15:02)
Hors ligne