2012-11-30 99 views
2

我想爲我的表對象創建一個抽象對象。返回表主鍵名與表網關

今天我有很多目標,如:CategoriaTableFornecedoresTable等實現$this->tableGateway->insert()$this->tableGateway->update()

我創建了一個包含大多數的functionallities的TableAbstract,但我被困在一個問題:

// In CategoriaTable my table id is named cat_id 
$this->tableGateway->update($object->getArrayCopy(),array('cat_id' => $object->getId())) 

// But in FornecedoresTable my table id is named for_id 
$this->tableGateway->update($object->getArrayCopy(),array('for_id' => $object->getId())) 

如何從tableGateway獲得表的id?有更好的方法去做我想做的事情?

我想我可以在我的對象注入ID名字,但我不知道的事情,這是做一個好辦法...

+0

我建議另一種方式(通過使用MetadataFeature)這裏 http://stackoverflow.com/questions/23428786/zf2-tablegateway-how-to-get-primary-key/31725804# 31725804 – xsubira

回答

3

您可以創建新TableGateway類參數。(在我的情況,我創建$ this-> primary;)

如果沒有設置,使用Zend \ Db \ Metadata \ Metadata直接從db結構中找到它。

<?php 
//... 
use Zend\Db\TableGateway\AbstractTableGateway; 
use Zend\Db\Metadata\Metadata; 

class AbstractTable extends AbstractTableGateway 
{ 
    protected $primary; 

    public function getPrimary() 
    { 
     if (null === $this->primary) { 
      $metadata = new Metadata($this->adapter); 
      $constraints = $metadata->getTable($this->getTable()->getTable()) 
            ->getConstraints(); 

      foreach ($constraints AS $constraint) { 
       if ($constraint->isPrimaryKey()) { 
        $primaryColumns = $constraint->getColumns(); 
        $this->primary = $primaryColumns; 
       } 
      } 
     } 

     return $this->primary; 
    } 
} 
?> 
+1

不錯的答案。但是這個方法調用'$ metadata-> getTable($ this-> getTable() - > getTable()) - > getConstraints()'應該超級慢嗎? – MurifoX