ZF2计算数据库中的行数

时间:2014-05-21 20:10:57

标签: php sql zend-framework2

您好我有这个问题:我想在数据库中计算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()正在工作,因为我在其他行上使用它。在代码中的标记行上报告错误。我的错误在哪里? ..谢谢你的回答

2 个答案:

答案 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执行查询,还有很多工作要做 -

  1. 首先拥有这样的构造函数。 //重要
  2. 在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); },

  3. 现在尝试productCounter()功能。

  4. 我希望它有所帮助。