1

我必须表 Stats 和 Stat_values。这些表是多对一的关系(一个统计可以有很多统计值)

我通过 querybuilder 创建了查询:

return $this->getEntityManager()
    ->createQueryBuilder()
    ->select(array('s', 'v'))
    ->from("CMailingDefaultBundle:Stat", "s")
    ->leftJoin("CMailingDefaultBundle:StatValue", "v")
    ->where("s.project = :project")
    ->andWhere("v.isCurrent = 1")
    ->setParameter("project", $project )
    ->getQuery()
    ->getResult();

它工作得很好,但我没有以这种方式得到结果(我让它更简单,因为数组的所有结构都很大):

[0] => Stats.field1, Stats.field2, ..., Stat_values.field1, Stat_values, ...
[1] => Stats.field1, Stats.field2, ..., Stat_values.field1, Stat_values, ...
etc...

但是我有:

[0] => Stats.field1, Stats.field2, ...
[1] => Stat_values.field1, Stat_values ...
etc...

这是“一点点”烦人。我尝试将select参数更改为“s,v” - 结果是一样的。

您对如何以第一种方式订购数据有任何想法吗?

4

2 回答 2

0

可能是因为你没有请求关系,只是一个单独的实体?

代替:

->from("CMailingDefaultBundle:Stat", "s")
->leftJoin("CMailingDefaultBundle:StatValue", "v")

尝试:

->from("CMailingDefaultBundle:Stat", "s")
->leftJoin("s.StatValue", "v")

假设 Stat 实体有一个名为 StatValue 的关系...

于 2013-07-25T12:19:34.863 回答
0

您可以使用另一种补水方法。Doctrine 提供了 5 种补水方法,如下所列:

/**
 * Hydrates an object graph. This is the default behavior.
 */
const HYDRATE_OBJECT = 1;

/**
 * Hydrates an array graph.
 */
const HYDRATE_ARRAY = 2;

/**
 * Hydrates a flat, rectangular result set with scalar values.
 */
const HYDRATE_SCALAR = 3;

/**
 * Hydrates a single scalar value.
 */
const HYDRATE_SINGLE_SCALAR = 4;

/**
 * Very simple object hydrator (optimized for performance).
 */
const HYDRATE_SIMPLEOBJECT = 5;

HYDRATE_SCALAR 为您提供所需的内容。

因此,通过使用实际的常量名称将调用:更改getResult();getResult(3);或更好一点:getResult(AbstractQuery::HYDRATE_SCALAR)

于 2015-08-18T10:44:53.073 回答