Php ZF2中的Zend_Db_Table_Abstract::createRow()

Php ZF2中的Zend_Db_Table_Abstract::createRow(),php,database,zend-framework2,Php,Database,Zend Framework2,在ZF1中,有一个函数Zend\u Db\u Table\u Abstract::createRow()来创建一个新的空行。然后可以对新行进行操作并将其存储在表中。rowID是使用autoincrement自动设置的,并且使用DB模式中的默认值填充值 如何在ZF2中执行此操作?是否有一个替代品可以替代Zend\u Db\u Table\u Abstract::createRow()?您可以使用TableGateway: $table= new TableGateway('users', $ada

在ZF1中,有一个函数
Zend\u Db\u Table\u Abstract::createRow()
来创建一个新的空行。然后可以对新行进行操作并将其存储在表中。
rowID
是使用autoincrement自动设置的,并且使用DB模式中的默认值填充值


如何在ZF2中执行此操作?是否有一个替代品可以替代Zend\u Db\u Table\u Abstract::createRow()?

您可以使用TableGateway:

$table= new TableGateway('users', $adapter);
$rowset = $table->insert(array('username' => 'bob'));

深入研究ZF2源代码,我发现了如何恢复原型。这是受到
Zend\Db\TableGateway\AbstractTableGateway::executeSelect()
Zend\Db\ResultSet\ResultSet
的启发。为了方便起见,我在AbstractMapper中使用了这个方法。您可能已经猜到,这只适用于
ResultSet
(与
ResultSet
相反)。但我想这也是你的情况,否则你就不需要这种方法了

<?php

namespace Application\Mapper;

use Zend\Db\TableGateway\TableGateway;

class AbstractMapper
{
    /**
     * @var \Zend\Db\TableGateway\TableGateway 
     */
    protected $tableGateway;

    public function __construct(TableGateway $tableGateway)
    {
        $this->tableGateway = $tableGateway;
    }

    /**
     * Create and returns a new row which is not yet saved in database
     * @return AbstractModel
     */
    public function createRow()
    {
        $resultSet = $this->tableGateway->getResultSetPrototype();
        $newRow = clone $resultSet->getArrayObjectPrototype();

        return $newRow;
    }
}

这将在数据库中创建一条记录,这可能不是期望的效果。我们可能需要一个“临时”对象。