その1 - publicメンバーをもつPOPOに対しObjectPropertyを使う
<?php
use Zend\Db\Adapter\Adapter;
use Zend\Db\ResultSet\HydratingResultSet;
use Zend\Db\TableGateway\TableGateway;
use Zend\Stdlib\Hydrator\ObjectProperty;
$config = include 'bootstrap.php';
class News
{
public $id;
public $title;
}
$hydratingResultSet = new HydratingResultSet(new ObjectProperty, new News);
$adapter = new Adapter($config);
$table = new TableGateway('news', $adapter, null, $hydratingResultSet);
$select = $table->select();
var_export($select->current());
/**
News::__set_state(array(
'id' => '1',
'title' => 'Sample News',
'project_id' => '1',
'summary' => 'Working fine.',
'description' => 'Worked
*YEAH!!*',
'author_id' => '3',
'created_on' => '2009-03-20 23:25:45',
'comments_count' => '0',
))*/
宣言されてないメンバ変数にアサインされるの気持ち悪かったら中身のない__set()でも用意すればいいんじゃないでしょうか(いや、どうだろう)
その2 - ClassMethodsハイドレータでsetterの手間を省く
<?php
use Zend\Db\Adapter\Adapter;
use Zend\Db\ResultSet\HydratingResultSet;
use Zend\Db\TableGateway\TableGateway;
use Zend\Stdlib\Hydrator\ClassMethods;
$config = include 'bootstrap.php';
class News
{
protected $id;
protected $title;
public function setId($id)
{
$this->id = $id;
}
public function setTitle($title)
{
$this->title = $title;
}
}
$hydratingResultSet = new HydratingResultSet(new ClassMethods, new News);
$adapter = new Adapter($config);
$table = new TableGateway('news', $adapter, null, $hydratingResultSet);
$select = $table->select();
var_dump($select->current());
その3 - Refletcionハイドレータでsetter/getterメソッドを用意する手間を省く
<?php
use Zend\Db\Adapter\Adapter;
use Zend\Db\ResultSet\HydratingResultSet;
use Zend\Db\TableGateway\TableGateway;
use Zend\Stdlib\Hydrator\Reflection as ReflectionHydartor;
$config = include 'bootstrap.php';
class News
{
protected $id;
protected $title;
}
$hydratingResultSet = new HydratingResultSet(new ReflectionHydartor, new News);
$adapter = new Adapter($config);
$table = new TableGateway('news', $adapter, null, $hydratingResultSet);
$select = $table->select();
var_dump($select->current());
Hydratorのまっとうな使い方は多分このへんです
https://github.com/speckcommerce/SpeckCart/blob/master/src/SpeckCart/Mapper/CartItemMapperZendDb.php