Something like this should get you started
stmt = $stmt;
$this->metadata = $metadata;
}
public function map()
{
$databaseData = $this->stmt->fetchObject();
$r = new \ReflectionClass($this->metadata['class']);
$obj = $r->newInstanceWithoutConstructor();
foreach ($this->metadata['c2p'] as $col => $property) {
$val = $databaseData->$col;
$type = $property['type'] ?: 'string';
settype($val, $type);
$prop = $r->getProperty($property['name']);
$prop->setAccessible(true);
$prop->setValue($val);
}
return $obj;
}
}
// usage
class Item {
public $id;
public $name;
public $description;
}
$mapper = new SimpleMapper($stmt, array(
// the class where we want to map the database data
'class' => 'Item',
// database column to object property mapping metadata
'c2p' => array(
'ItemID' => array('name' => 'id', 'type' => 'int'),
'ItemName' => array('name' => 'name', 'type' => 'string'),
'ItemDescription' => array('name' => 'description', 'type' =>
'string')
)
));
$item = $mapper->map();
On Thu, Jun 11, 2015 at 9:26 AM, Octopus Puras wrote:
> I have a MySQL table, whose name is Items:
> ItemID ItemName ItemDescription
>
> I also have a PHP class:
> class Item {
> public $id;
> public $name;
> public $description;
> }
>
> If I execute $stmt->fetchObject(), I will get an object with fields of
> ItemID, ItemName, etc. But I want to adapt the name of the fields to the
> Item class. What should I do?
>