尝试适应ZF2骨架应用程序,我在resultSet中检索字段时遇到了麻烦。我的表project包含四个字段:id、title、shortTitle、year。我使用的是典型的fetchAll函数:
public function fetchAll() {
$resultSet = $this->tableGateway->select();
return $resultSet;
}
Project类反映了四个字段
class Project {
public $id;
public $title;
public $shortTitle;
public $year;
public function exchangeArray($data) {
$this->id = (!empty($data['id'])) ? $data['id'] : null;
$this->title = (!empty($data['title'])) ? $data['title'] : null;
$this->shortTitle = (!empty($data['shortTitle'])) ? $data['shortTitle'] : null;
$this->year = (!empty($data['year'])) ? $data['year'] : null;
}
}
Module.php中的表网关工厂如本教程所述:
public function getServiceConfig() {
return array(
'factories' => array(
'Project'Model'ProjectTable' => function($sm) {
$tableGateway = $sm->get('ProjectTableGateway');
$table = new ProjectTable($tableGateway);
return $table;
},
'ProjectTableGateway' => function($sm) {
$dbAdapter = $sm->get('Zend'Db'Adapter'Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Project());
return new TableGateway('project', $dbAdapter, null, $resultSetPrototype);
},
),
);
}
传递给数据库的查询是正确的,并给出正确的结果:
SELECT `project`.* FROM `project`
$resultSet看起来好像得到了正确的原型和正确的行数,但它没有正确匹配列名。print_r ($ resultSet ->当前());给:
Project'Model'Project Object ( [id] => 1 [title] => Some title 1
[shortTitle] => [year] => )
而print_r(元数据);在exchangeArray函数给出:
Array ( [id] => 1 [title] => Some title 1 [project] => 2012 )
对象似乎只得到前两个字段的权利,然后创建一个字段[project],最后一列的值在结果中可用。
我一定是在什么地方犯了一个愚蠢的错误,但我不知道在哪里。谢谢。
请在Module.php中检查您的TableGateway工厂-它应该类似于此-
也需要use ...
语句。
use Zend'Db'ResultSet'ResultSet;
use Zend'Db'TableGateway'TableGateway;
use [.....]'Model'Product; //Add the Module Name here
use [.....]'Model'ProductTable; //Add the Module Name here
'Project'Model'ProjectTable' => function($sm) { //Change Module name accordingly.
$tableGateway = $sm->get('ProjectTableGateway');
$table = new ProjectTable($tableGateway);
return $table;
},
'ProjectTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend'Db'Adapter'Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Project());
return new TableGateway('project', $dbAdapter, null, $resultSetPrototype);
//Change the the tablename accordingly.
},
然后在你的问题描述中添加print_r($resultSet->current());
的结果。