2014-05-02 59 views
1

我想确定使用MetadataFetature的表的主键。但是,数据在受保护的$ sharedData内,没有任何访问方法。如何接受他们?我是否添加“getPrimary”方法创建新类?ZF2 TableGateway如何获得主键

在AbstractTableGateway孩子:

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

越来越

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

这应该是有帮助的[http://stackoverflow.com/questions/13646338/return-table-primary-key-name-with-tablegateway](http://stackoverflow.com/questions/ 13646338/return-table-primary-key-name-with-tablegateway) –

+0

好吧,我终于创建了自己的特性来访问该属性:)但是,我已经放弃了Zend 2作为完全unusefull的东西。 – Ivan

+0

@KunalDethe会更好地写出一个解决方案..我还没有看到如何帮助页面。 – Erik

回答

0

你只需要申报的FeatureSet的后裔,并MetadataFeature的后裔。

在自己的FeatureSet覆盖功能canCallMagicGet。 这里是我是如何做到的

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

在我的情况为例,getMetadataFeature返回MetadataFeature实例(的instanceof)从的FeatureSet类继承财产的保护功能$发现的第一次出现。

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

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

最后,你可以在自己的MetadataFeature声明魔术方法__get。您的__get可能会返回元数据直接来自受保护的财产$ sharedData

总之,一旦你已经声明自己的FeatureSetMetadataFeature后裔,您可以使用它们替代当前的那些的。 然后,你可以调用

$tableGatewayInstance->metadata 

MetadataFeature收集将提供给您的元数据。

干杯