【发布时间】:2014-05-25 17:32:35
【问题描述】:
尝试调整 ZF2 skeleton application,结果集中检索到的字段有问题。 我的表“项目”包含四个字段: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->current());给出:
Project\Model\Project Object ( [id] => 1 [title] => Some title 1
[shortTitle] => [year] => )
而 print_r($data);在 exchangeArray 函数中给出:
Array ( [id] => 1 [title] => Some title 1 [project] => 2012 )
似乎该对象只正确获取了前两个字段,然后使用结果中可用的最后一列的值创建了一个字段 [project]。
我一定在某个地方犯了一个愚蠢的错误,但我不知道在哪里。 谢谢。
【问题讨论】:
-
我不认为这是导致您的问题的原因,但由于我从未见过这样使用它,您能否尝试将 !empty() 更改为官方文档建议的 $this- >id = (isset($data['id'])) ? $data['id'] : null;
-
感谢您的建议。我试过了,没用,很遗憾。请注意,我正在使用的“官方文档”版本是提议 !empty(),而不是 isset():请参阅 framework.zend.com/manual/2.2/en/user-guide/…
-
是的,你是对的。没有注意到 2.1 的变化。是否仍按年返回项目?
-
很遗憾,没有变化。
-
你能试试这样的原始查询吗? $adapter = $this->tableGateway->getAdapter(); //创建查询 $resultSet = $adapter->query("SELECT project.* FROM project",array()); //将对象转换为数组 $rowData=$resultSet->toArray();返回$行数据;只是看看你是否仍然得到相同的结果?
标签: php mysql zend-framework2