0

我之前问过一个关于如何使用 tablegateway 有效地进行插入\更新的问题,并在文档Zend\Stdlib\Hydrator\ClassMethods中的这段代码中得到了通知:

public function saveAlbum(Album $album)
{
    $data = array(
        'artist' => $album->artist,
        'title'  => $album->title,
    );

    $id = (int)$album->id;
    if ($id == 0) {
        $this->tableGateway->insert($data);
    } else {
        if ($this->getAlbum($id)) {
            $this->tableGateway->update($data, array('id' => $id));
        } else {
            throw new \Exception('Form id does not exist');
        }
    }
}

可以用以下代码替换:

saveAlbum(Album $album) 
{
    $hydrator   = new ClassMethods(false);
    $data = $hydrator->extract($album);
    ...

但是我发现使用$hydrator->extract($album);它时返回一个空数组,这可能是什么原因?我对传递给函数var_dump()的对象做了一个,它似乎是有效的。$album我还需要做些什么才能使其正常工作吗?

4

1 回答 1

1

类方法 hydrator 假定您getXXX()对每个属性都有方法,但您上一个问题中的类没有。您可能想尝试使用Zend\Stdlib\Hydrator\ObjectPropertyhydrator,这应该使用对象的公共属性返回一个数组。

于 2014-04-24T14:53:47.800 回答