【问题标题】:symfony/doctrine special query (MAX) with Doctrine_Query::create()带有 Doctrine_Query::create() 的 symfony/doctrine 特殊查询 (MAX)
【发布时间】:2025-12-06 03:25:01
【问题描述】:

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

好的,我们现在开始吧:

Table: a
primary key: id
string: name

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

我想要做的是检索给定对象 a 的最大集群 int。在 SQL 中:

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

当我使用 symfony 1.4 和教义 1.2 时,我想通过向 Class a 添加一个名为 maxCluster() 的方法来解决问题:

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 函数的代码如下所示:

$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 而不是对象。也许任何人都可以指出此类查询的最佳实践是什么。

【问题讨论】:

    标签: symfony1 doctrine symfony-1.4 doctrine-1.2


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。请看我上面的编辑:它现在可以工作了,但我对此并不满意。
    • 尝试使用不同的补水模式:return $q->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR)
    • 非常感谢您的提示,我会尝试的!
    最近更新 更多