在 ZF1 中,有一个Zend_Db_Table_Abstract::createRow()
创建新空白行的功能。然后可以操作此新行并将其存储在表中。使用rowID
自动增量自动设置,并且使用数据库模式中的默认值填充值。
我怎样才能在ZF2中做到这一点?有替代品Zend_Db_Table_Abstract::createRow()
吗?
在 ZF1 中,有一个Zend_Db_Table_Abstract::createRow()
创建新空白行的功能。然后可以操作此新行并将其存储在表中。使用rowID
自动增量自动设置,并且使用数据库模式中的默认值填充值。
我怎样才能在ZF2中做到这一点?有替代品Zend_Db_Table_Abstract::createRow()
吗?
挖掘 ZF2 源代码,我发现了如何取回原型。这深受Zend\Db\TableGateway\AbstractTableGateway::executeSelect()
和的启发Zend\Db\ResultSet\ResultSet
。为方便起见,我在 AbstractMapper 中使用此方法。正如您可能已经猜到的那样,这只适用于ResultSet
(而不是HydratingResultSet
)。但我想这也是你的情况,否则你不需要这样的方法。
<?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;
}
}
您可以使用 TableGateway:
$table= new TableGateway('users', $adapter);
$rowset = $table->insert(array('username' => 'bob'));