我在 Zend Framework 2 中,试图在使用 postgresql PDO 插入后获取最后插入的 id。除非我添加一个 SequenceFeature,否则插入工作正常,如下所示:
class LogTable extends AbstractTableGateway
{
protected $table = 'log';
public function __construct(Adapter $adapter)
{
$this->adapter = $adapter;
$this->featureSet = new Feature\FeatureSet();
$this->featureSet->addFeature(new Feature\SequenceFeature('id','log_id_seq'));
$this->resultSetPrototype = new ResultSet();
$this->resultSetPrototype->setArrayObjectPrototype(new Log());
print_r($this->getFeatureSet());
$this->initialize();
}
当我后来做这样的插入时:
$this->insert($data);
它失败了,因为 INSERT INTO "log" () VALUES (),所以由于某种原因 zf2 将要插入的列和值清空,但前提是我添加了该 SequenceFeature。
如果我不添加该功能,则插入工作正常,但我无法获得最后一个序列值。调试 Zend/Db/Sql/Insert.php,我发现 values 函数在 SequenceFeature 中被访问了两次,但在它不在那里时只有一次。由于某种原因,当 SequenceFeature 存在时,所有插入列和值都被清空,可能是因为这个双重调用?我还没有进一步调查,但也许它正在更新序列,然后在插入时丢失数据?
这是一个错误,还是只是我缺少一些东西?