1

ZendSkeletonApplicationから始めて、Zend \ Db \ TableGateway\TableGatewayを拡張するモデルを追加しました。私は次の方法を持っています:

public function findByType($type) {
    $rowset = $this->select('type' => $type);
    return $rowset;
}

これは機能しますが、これを行うと次のようになります。

$foo = $table->findBytype('foo');
$bar = $table->findBytype('bar');

最初のものは機能し、実行されるクエリは次のとおりです。

SELECT * FROM table WHERE 'type' = 'foo'

ただし、2番目のクエリは次のクエリを実行します。

SELECT * FROM table WHERE 'type' = 'foo' AND 'type' = 'bar'

これは予想される動作ですか?もしそうなら、どうすれば2回目にメソッドを呼び出して、次のクエリを実行できますか?

SELECT * FROM table WHERE 'type' = 'bar'

前もって感謝します!

4

1 に答える 1

8

次のように tableGateway で select を使用する必要があります。

$select = $this->getSql()->select();
$select->where(array('type' => 'foo'))
    ->where(array('type' => 'bar'));
$rowset = $this->selectWith($select);

select() は、次回呼び出すときに where() パラメータをリセットします。

私のブログでより多くの使用法を参照してください: http://avnpc.com/pages/advanced-database-select-usage-in-zf2

于 2012-06-09T08:08:16.367 に答える