2014-05-02 81 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收集將提供給您的元數據。

乾杯