0

私は 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 になります。おそらく、この二重呼び出しが原因でしょうか? まだ詳しく調べていませんが、シーケンスを更新し、挿入時にデータを失っているのではないでしょうか?

これはバグですか、それとも私が見逃しているものがありますか?

4

1 に答える 1