在ZF1中,有一個函數Zend_Db_Table_Abstract::createRow()
來創建一個新的空白行。這個新的行然後可以被操縱並存儲在表中。 rowID
自動設置爲自動增量,並使用數據庫模式的缺省值填充值。ZF2中的Zend_Db_Table_Abstract :: createRow()
我該怎麼做ZF2?是否有替代Zend_Db_Table_Abstract::createRow()
?
在ZF1中,有一個函數Zend_Db_Table_Abstract::createRow()
來創建一個新的空白行。這個新的行然後可以被操縱並存儲在表中。 rowID
自動設置爲自動增量,並使用數據庫模式的缺省值填充值。ZF2中的Zend_Db_Table_Abstract :: createRow()
我該怎麼做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'));
這將在數據庫中創建一條記錄,這可能不是預期的效果。我們可能需要一個「臨時」對象。 – PowerKiKi