私は 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 をデバッグすると、SequenceFeature が含まれていると値関数が 2 回アクセスされることがわかりましたが、そこにない場合は 1 回だけです。何らかの理由で、SequenceFeature が存在する場合、すべての挿入列と値が null になります。おそらく、この二重呼び出しが原因でしょうか? まだ詳しく調べていませんが、シーケンスを更新し、挿入時にデータを失っているのではないでしょうか?
これはバグですか、それとも私が見逃しているものがありますか?