具有多对一关联的实体上的 getArrayResult
Posted
技术标签:
【中文标题】具有多对一关联的实体上的 getArrayResult【英文标题】:getArrayResult on entity with ManyToOne association 【发布时间】:2011-03-30 11:50:13 【问题描述】:具有以下基本表(一对多关系) 客户端 - 有很多用户。 用户 - 每个用户都属于单个客户端。
在一个非常简单的示例中,如果我查询用户实体 (Querybuilder)
与getArrayResult()
我看到以下内容:
-
实际生成的SQL中包含外键字段
返回(即 ClientID)
实际返回的数据数组不包含外键
场地。
现阶段我不需要返回国外数据,所以不需要 加入关联的表。
所以问题是...... 在我的数组中返回什么或如何返回外键值?
查询是:
$qb = $this->_em->createQueryBuilder();
$qb->select('e');
$qb->from('Entity\User', 'e');
SQL 是:
SELECT w0_.Id AS Id0, w0_.Name AS Name2, w0_.ClientID AS ClientID7
FROM users w0_
【问题讨论】:
【参考方案1】:在执行之前尝试在查询(而不是构建器)上设置HINT_INCLUDE_META_COLUMNS
查询提示。
$q->setHint(Query::HINT_INCLUDE_META_COLUMNS, true);
【讨论】:
如果我尝试只抓取 select 语句中的外键字段(而不是整个实体),这会不起作用吗?它似乎不适合我。 太好了,这个是救命稻草! 谢谢,现在我向前迈进了一步,但我需要将关系作为数组而不仅仅是 id... 以便能够使用 json 处理它,一个请求而不是每个 id 的 10 个请求 这很有趣,但效果不如预期。获取外键对我来说似乎很正常,但由于某种原因,关联的列名以 snake_case 形式返回,而其他属性以 CamelCase 形式返回。【参考方案2】:据我所知,您不能这样做,因为 ClientID 不是用户的属性。用户有一个类似于 $client 的属性,并且该客户端实体有一个 $id。
这让您感到困惑,因为您正在处理实体,但您仍在使用 SQL 进行思考。
解决方案虽然效率稍低,但可能是将 Client 实体加入您的 DQL 查询,然后获取 $results[N]['client']['id']
(或类似的,我对 getResultArray() 不太熟悉)
【讨论】:
这是我正在使用的解决方案,并且感谢我应该考虑“实体和 ORM”,而不是 SQL……但我们仍然希望生成高效的 SQL。我们真的不想不必要地加入另一个表。非常低效。不过感谢您的评论...以上是关于具有多对一关联的实体上的 getArrayResult的主要内容,如果未能解决你的问题,请参考以下文章