Doctrine - querybuilder - 如何对“join”查询的结果进行交替?

时间:2013-07-25 10:39:10

标签: symfony doctrine-orm

我必须表格统计和Stat_values。这些表是多对一的关系(统计数据可以有很多stat_value)

我通过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” - 结果是相同的。

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

2 个答案:

答案 0 :(得分:0)

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

而不是:

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

尝试:

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

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

答案 1 :(得分: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)