3

ZF2 の paginator DbSelect アダプターで DISTINCT クエリを使用しているときに問題に直面しています。私の歩みは。

最初に Select オブジェクトを作成しました。

$select = new Select();
$select->columns(
    array(
          'personId' => new Expression("DISTINCT $this->table.person_id"),
'first_name', 'middle_name', 'last_name'));
$select->from($this->table);

次に、このオブジェクトを Zend\Paginator\Adapter\DbSelect に渡しました

$result = new DbSelect($select, $this->adapter, $this->resultSetPrototype);

今の問題は、SQLクエリを印刷 echo str_replace('"', '', $select->getSqlString()); してmysqlでこのクエリを実行すると、12の結果が表示されることです。

しかし$result->count();、55の結果を示しています。

問題を解明しようとしたところ、おそらく Zend\Paginator\Adapter\DbSelectcount()関数にバグがあることがわかりました。

Zend\Paginator\Adapter\DbSelectcount()関数で SQL クエリを出力すると、クエリから DISTINCT 句が削除され、独自のカウント列が追加されました c.

SELECT COUNT(1) AS c FROM myTable;

どうすればいいですか?

4

1 に答える 1

2

はいマニッシュあなたの言うとおり、カウント機能にはバグがあります。それは、distinct 句と group by 句を残します。私も同じ問題に遭遇しました。しかし、それに対する解決策は見つかりませんでした。

https://github.com/zendframework/zf2/blob/master/library/Zend/Paginator/Adapter/DbSelect.phpを見ることができるように

カウント関数は、distinct または group by 句を使用する場合、カウントを計算します。

それには2つの解決策があります。1) 問題を提起し、問題が修正されるのを待ちます 2) 独自のアダプターを作成します

私は2番目のもので行きます。ZF2 の最も優れた点の 1 つは、必要に応じてすべてを記述できる柔軟性があることです。それでは、独自のアダプターを作成してください

于 2013-06-08T01:17:06.620 に答える