2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Zend\DbのHydratingResultSetでgetter/setter

2
Last updated at Posted at 2013-03-09

その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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?