Код: Выделить всё
select * from pv_my_table_valued_function(1)
например, обычное создание экземпляра будет таким:< /p>
Код: Выделить всё
'Application\Model\MyTable' => function($sm) {
$tableGateway = $sm->get('MyTableGateway');
$table = new MyTable($tableGateway);
return $table;
},
'MyTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new MyTableEntity());
return new TableGateway('my_table', $dbAdapter, null, $resultSetPrototype);
},
Код: Выделить всё
'MyTableValuedGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new MyTableValued());
return new TableGateway('pv_my_table_valued_function(?)', $dbAdapter, null, $resultSetPrototype);
},
Изменить:
В качестве быстрого базового примера того, как я буду использовать tableGateway позже:
В моей модели MyTable.php
Код: Выделить всё
public function fetchAll()
{
// I already initialized the tableGateway via Dependecy Injection in
// a __construct() in an abstract class
$select = $this->tableGateway->getSql()->select();
// some sql stuff
$select->where(...);
$select->order(...);
// now it gets tricky.. what I normally do is known
$resultSet = $this->tableGateway->selectWith($select);
// what I need to do when using my table valued function is like
$adapter = $this->tableGateway->getAdapter();
$platform = $adapter->getPlatform();
$sqlStr = $select->getSqlString($platform);
$select = str_replace('FROM [my_table]', "FROM pv_my_table_valued_function({$this->my_special_parameter}) AS my_pv", $sqlStr);
$resultSet = $adapter->query($select, array());
return $resultSet;
}
Надеюсь, это прояснит ситуацию
Подробнее здесь: https://stackoverflow.com/questions/501 ... eway-table
Мобильная версия