您好我有这个问题:我想在数据库中计算ZF2中的行,我在控制器中使用此代码:
public function getProductTable()
{
if (!$this->productTable) {
$sm = $this->getServiceLocator();
$this->productTable = $sm->get('Product\Model\ProductTable');
}
return $this->productTable;
}
public function productCounter($user_id){
//product Count
$productCount = $this->getProductTable()->select(); // error reported on this line
return $productCount->from("product")->where(array('user_id' => $user_id))->count();
}
函数getProductTable()正在工作,因为我在其他行上使用它。在代码中的标记行上报告错误。我的错误在哪里? ..谢谢你的回答
答案 0 :(得分:0)
将productCounter功能更改为此
public function productCounter($user_id) {
return $this->getProductTable()->select(array('user_id' => $user_id))->count();
}
Select方法立即返回结果,而不是Select对象。
答案 1 :(得分:0)
我希望在getProductTable()
和productCounter()
函数的同时,您也可以使用以下构造函数;
protected $tableGateway;
.....
...
public function __construct(TableGateway $tableGateway) {
$this->tableGateway = $tableGateway;
}`
如果有,那就试试吧 -
public function productCounter($user_id) {
return $this->tableGateway->select(array('user_id' => $user_id))->count();
}
这应该可以正常工作。
现在,如果您没有这样的构造函数,那么如果您想使用TableGateway执行查询,还有很多工作要做 -
在Product \ Module.php中 -
'Product\Model\ProductTable' => function($sm) {
$tableGateway = $sm->get('ProductTableGateway');
$table = new ProductTable($tableGateway);
return $table;
},
'ProductTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Product());
return new TableGateway('product', $dbAdapter, null, $resultSetPrototype);
},
现在尝试productCounter()
功能。
我希望它有所帮助。