我必须表格统计和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” - 结果是相同的。
您是否有任何想法如何以第一种方式订购数据?
答案 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)