Je voudrais demander de l'aide concernant TableGateway dans Zend Framework 2. Fondamentalement, j'ai suivi le tutoriel étape par étape en faisant de petites modifications, mais je ne ' Je sais où j'ai raté quelque chose.Zend Framework 2 TableGateway Méthode fetchAll renvoie le jeu de résultats vide mais la table contient des données
Le problème décrit ci-dessous indépendant de la plate-forme, j'ai pu le reproduire sur Windows et Linux, mais je n'utilise que Windows maintenant.
Je cette table dans mon serveur MySQL placé sur ma machine locale:
CREATE TABLE `admmenu` (
`menu_id` int(11) NOT NULL,
`menu_name` varchar(255) NOT NULL,
`menu_desc` varchar(255) DEFAULT NULL,
`menu_category_id` int(11) DEFAULT NULL,
`is_active` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`menu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `admmenu`
VALUES (1,'add_outing',NULL,1,1),
(2,'list_outings',NULL,1,1),
(3,'add_income',NULL,2,1),
(4,'list_incomes',NULL,2,1),
(5,'add_organization',NULL,3,1),
(6,'add_category',NULL,3,1),
(7,'add_customer',NULL,3,1);
J'ai dans ma classe AdmMenuTable php:
namespace VSMoney\Model;
use Zend\Db\TableGateway\TableGateway;
class AdmMenuTable {
protected $tableGateway;
public function __construct(TableGateway $tableGateway) {
$this->tableGateway = $tableGateway;
}
public function fetchAll() {
$resultSet = $this->tableGateway->select();
return $resultSet;
}
}
Dans une autre classe que j'appelle la fetchAll() méthode pour obtenir l'ensemble de données et que vous voulez le manipuler dans une boucle foreach.
J'ai essayé de vider l'ensemble de données que j'ai mais il est vide. Si je lance la requête sql qui peut être trouvée dans l'objet resultset dans mysql console ou mysql workbench, alors j'ai obtenu le résultat que je veux.
Il n'y a pas d'erreur de connexion lorsque mon code est en cours d'exécution et le fichier journal mysql dos ne contient aucun problème.
object(Zend\Db\ResultSet\ResultSet)[272]
protected 'allowedReturnTypes' =>
array (size=2)
0 => string 'arrayobject' (length=11)
1 => string 'array' (length=5)
protected 'arrayObjectPrototype' =>
object(VSMoney\Model\AdmMenu)[238]
public 'menu_id' => null
public 'menu_name' => null
public 'menu_desc' => null
public 'menu_category' => null
public 'is_active' => null
protected 'returnType' => string 'arrayobject' (length=11)
protected 'buffer' => null
protected 'count' => int 7
protected 'dataSource' =>
object(Zend\Db\Adapter\Driver\Pdo\Result)[271]
protected 'statementMode' => string 'forward' (length=7)
protected 'resource' =>
object(PDOStatement)[244]
public 'queryString' => string 'SELECT `admmenu`.* FROM `admmenu`' (length=33)
protected 'options' => null
protected 'currentComplete' => boolean false
protected 'currentData' => null
protected 'position' => int -1
protected 'generatedValue' => string '0' (length=1)
protected 'rowCount' => int 7
protected 'fieldCount' => int 5
protected 'position' => int 0
Le ServiceConfig ressemble à ceci:
'factories' => array(
'VSMoney\Model\AdmMenuTable' => function ($sm) {
$tableGateway = $sm->get('AdmMenuTableGateway');
$table = new AdmMenuTable($tableGateway);
return $table;
},
'AdmMenuTableGateway' => function ($sm) {
//$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$config = $sm->get('config');
$config = $config['db'];
$dbAdapter = new DbAdapter($config);
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new AdmMenu());
return new TableGateway('admmenu', $dbAdapter, null, $resultSetPrototype);
},
classe AdmMenu:
<?php
namespace VSMoney\Model;
class AdmMenu{
public $menu_id;
public $menu_name;
public $menu_desc;
public $menu_category;
public $is_active;
public function exchangeArray($data) {
$this->menu_id = (isset($data['menu_id'])) ? $data['menu_id'] : null;
$this->menu_name = (isset($data['manu_name'])) ? $data['menu_name'] : null;
$this->menu_desc = (isset($data['menu_desc'])) ? $data['menu_desc'] : null;
$this->menu_category = (isset($data['menu_category'])) ? $data['menu_category'] : null;
$this->is_active = (isset($data['is_active'])) ? $data['is_active'] : null;
}
}
?>
À quoi ressemble votre AdmMenu? Il semble que le jeu de résultats capture 7 enregistrements, aussi comment appelez-vous fetchAll, votre problème ne semble pas être avec la fin de la requête. – crowebird
Crowebird: La classe est attachée et merci de m'aider! – SayusiAndo
Tout semble correct, y compris AdmMenu. Comment récupérez-vous le ResultSet? Vous devriez avoir quelque chose comme $ rs = $ this-> getServiceLocator() -> get ('VSMoney \ Model \ AdmMenuTable') -> fetchAll(); – crowebird