ZF2自定义查询

san*_*ers 3 zend-framework2

大家好,早上好,

我在手册中关注了Rob Allen的qickstart教程.我想改变一些事情.我想要做的一件事是获得这样的查询:

"SELECT max(id) FROM Albums";
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西

$this->select();
$this->columns(array('id' => 'MAX(id)'));
Run Code Online (Sandbox Code Playgroud)

显然这不是这样做的方法.我可能需要一些表达式对象左右.

谁能告诉我如何解决这个问题?

编辑(忘记上面)

整个代码基于手册中的快速入门(ZF2),我已经设法编写了这样的查询:

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

结果是一个空对象.

但是当我改变的时候

    $select->columns(array(new Expression('max(id) as MaxId')));
Run Code Online (Sandbox Code Playgroud)

  $select->columns(array(new Expression('max(id) as id')));
Run Code Online (Sandbox Code Playgroud)

然后我找回一个id为1的对象.这是max(id).

但是当我在函数exchangeArray中将我的相册对象添加到maxId的一行时,它返回maxId字段.

但是,每次我只想做这样的查询时,我不需要这样做.这真的是它的工作方式吗?

Sam*_*Sam 5

使用Zend\Db\Sql\Expression

因此,如果我正确地看到这一点(可能不是这种情况),你就像你刚才那样做,但将SQL表达式包装进去new Expression('max(id)).所以应该如下

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

如果这样的语法是错误的,请不要诅咒我,但我会假设知道Sql\Expression将帮助你;)