ZF1にはZend_Db_Table_Abstract::createRow()
、新しい空白行を作成する機能がありました。次に、この新しい行を操作してテーブルに保存できます。はrowID
自動インクリメントで自動的に設定され、値にはDBスキーマのデフォルト値が入力されました。
ZF2でこれを行うにはどうすればよいですか?の代替品はありZend_Db_Table_Abstract::createRow()
ますか?
ZF1にはZend_Db_Table_Abstract::createRow()
、新しい空白行を作成する機能がありました。次に、この新しい行を操作してテーブルに保存できます。はrowID
自動インクリメントで自動的に設定され、値にはDBスキーマのデフォルト値が入力されました。
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'));