3

こんにちは、おはようございます。

マニュアルのRobAllenによるqickstartチュートリアルに従っています。私はいくつかのことを変えようとしています。私がやろうとしていることの1つは、次のようなクエリを取得することです。

"SELECT max(id) FROM Albums";

私は次のようなことを試みました

$this->select();
$this->columns(array('id' => 'MAX(id)'));

どうやらこれはそれを行う方法ではありません。おそらく何らかの式オブジェクトが必要です。

誰かがこれを解決する方法を教えてもらえますか?

編集(上記を忘れて)

このコード全体は、マニュアル(ZF2)のクイックスタートに基づいています。私は次のようなクエリを作成できました。

    $select = $this->getSql()->select();
    $select->columns(array(new Expression('max(id) as MaxId')));
    $rowset = $this->selectWith($select);
    $row = $rowset->current();
    return $row;

この結果、空のオブジェクトになります。

しかし、私が変わるとき

    $select->columns(array(new Expression('max(id) as MaxId')));

  $select->columns(array(new Expression('max(id) as id')));

次に、idが1のオブジェクトを取得します。これはmax(id)です。

しかし、アルバムオブジェクトを関数exchangeArrayにmaxIdを含む1行追加すると、maxIdフィールドが返されます。

しかし、このようなクエリを実行するたびにこれを実行する必要があるということはあり得ません。これは本当にそれが機能する方法ですか?

4

1 に答える 1

5

Zend\Db\Sql\Expressionを使用

したがって、これが正しく表示されている場合 (そうではない可能性があります)、先ほど行ったように実行しますが、SQL 式を にラップしますnew Expression('max(id))。したがって、次のようになります

use Zend\Db\Sql\Expression;
//...
$this->columns(array(
    'maxid' => new Expression('max(id)')
));

このような構文が間違っていても、私をののしらないでください。ただし、Sql\Expression について知っていれば、すでに役に立っていると思います ;)

于 2012-09-23T08:48:16.350 に答える