2012-12-19 28 views
3

在ZF1中,有一個函數Zend_Db_Table_Abstract::createRow()來創建一個新的空白行。這個新的行然後可以被操縱並存儲在表中。 rowID自動設置爲自動增量,並使用數據庫模式的缺省值填充值。ZF2中的Zend_Db_Table_Abstract :: createRow()

我該怎麼做ZF2?是否有替代Zend_Db_Table_Abstract::createRow()

回答

1

在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; 
    } 
} 
0

您可以使用TableGateway:

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

這將在數據庫中創建一條記錄,這可能不是預期的效果。我們可能需要一個「臨時」對象。 – PowerKiKi