symfony / doctrine特殊查询(MAX)与Doctrine_Query :: create()

时间:2011-08-30 09:22:54

标签: symfony1 doctrine symfony-1.4 doctrine-1.2

我正在尝试向我的应用添加新查询,而且我有点卡住了。我也不知道用什么作为搜索词,所以我卡住了。

好的,我们马上进入吧:

Table: a
primary key: id
string: name

Table: b
primary key: id
foreign key: a_id
int: cluster

我想要做的是检索给定对象的max cluster int。在SQL中:

SELECT MAX(b.cluster) FROM b WHERE b.a_id = ? GROUP BY b.cluster;

当我使用symfony 1.4和doctrine 1.2时,我希望通过向名为maxCluster()的类a添加方法来实现它:

class A extends BaseA{

  ..

  public function maxCluster(){
    $q = Doctrine_Query::create()->select('MAX(b.cluster)')->from('B b')->where('b.a_id = ?', $this->getId())->groupBy('b.cluster');
    return Doctrine_Core::getTable('A')->execute($q);
  }
}

执行此操作时,我收到以下错误消息:

A query with the name A/SELECT MAX(b.cluster) FROM B b WHERE b.a_id = ? GROUP BY b.cluster does not exist.

我认为解决方案应该不那么复杂,我现在就被卡住了。

感谢您的帮助, 塞巴斯蒂安

编辑:我有一个提示,所以知道maxCluster-function的代码如下:

$q = Doctrine_Query::create()->select('MAX(b.cluster) AS maxCluster')->from('B b')->where('b.a_id = ?', $this->getId())->;
$result = $q->fetchOne();
return $result->maxCluster;

现在我的问题是:这是最好的方法吗?我很困惑,fetchOne返回一个图片数组。我不希望这样的行为,因为我选择一个int而不是对象。也许任何人都可以指出这类查询的最佳实践是什么。

1 个答案:

答案 0 :(得分:1)

相对于getTable的执行方法用于执行命名查询,如果要使用它们,请查看doctrine manual以查找更多信息。

或者您可以使用return $q->execute()返回查询结果。