ZF2 TableGateway如何获得主键

时间:2014-05-02 12:59:04

标签: zend-framework2

我尝试使用MetadataFetature确定表的主键。但是,数据在受保护的$ sharedData内,没有任何访问方法。如何加入他们?我是否只是为了添加" getPrimary"而创建新课程?方法?

在AbstractTableGateway子项中:

$metadata = $this->getFeatureSet()->getFeatureByClassName('Zend\Db\TableGateway\Feature\MetadataFeature');
        die(vardump($this->sharedData));

获得

Invalid magic property access in Zend\Db\TableGateway\AbstractTableGateway::__get()

1 个答案:

答案 0 :(得分:0)

您只需要声明 FeatureSet 的后代,以及 MetadataFeature 的后代。

在您自己的 FeatureSet 中,覆盖功能 canCallMagicGet 。 这是我如何做到的一个例子

public function canCallMagicGet($property)
{
    if ($property == 'metadata'){
        $result = $this->getMetadataFeature();          
        return ($result!==FALSE);
    }
    else return parent::canCallMagicGet($property);        
}

就我而言, getMetadataFeature 会返回在FeatureSet类继承的受保护属性$ feature中找到的首次出现的MetadataFeature实例( instanceof )。

您也可以覆盖第二种方法 callMagicGet 。 以下是一个例子:

public function callMagicGet($property)
{        
    if ($property == 'metadata'){
        $metadataFeature = $this->getMetadataFeature();            
        return $metadataFeature->metadata;
    }
    else
        return parent::callMagicGet($property);
}

最后,您可以在自己的 MetadataFeature 中声明魔术方法 __ get 。您的 __ get 可以直接从受保护的属性 $ sharedData 返回元数据

总之,一旦声明了自己的 FeatureSet MetadataFeature 后代,就可以使用它们而不是当前的。 然后你可以打电话

$tableGatewayInstance->metadata

并且 MetadataFeature 收集的元数据将可供您使用。

干杯