我正在尝试为我的表对象创建一个抽象对象。
今天我有很多对象,例如:CategoriaTable
、FornecedoresTable
等,它们实现了$this->tableGateway->insert()
, $this->tableGateway->update()
等
我创建了一个包含大部分功能的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?有更好的方法来做我想做的事吗?
我想我可以在我的对象中注入(inject) id 名称,但我不认为这是一个好方法......
最佳答案
您可以创建新的 TableGateway 类参数。(在我的例子中,我创建了 $this->primary;)
如果未设置,请使用 Zend\Db\Metadata\Metadata 直接从数据库结构中查找它。
<?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;
}
}
?>
关于zend-framework2 - 使用 tableGateway 返回表主键名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13646338/