如何从Doctrine中的部分实体获取外键?

时间:2013-04-10 14:56:39

标签: doctrine-orm doctrine zend-framework2

我正在使用Doctrine和Zend Framework 2.当我使用“Doctrine partials”时,我不知道如何为该实体获取外键。我还使用查询构建器,我想返回数组。

在我使用之前:IDENTITY(e.variable),但现在当我使用partial时,我的代码如下:partial e.{id, name...}。我不知道在哪里以及我应该使用什么来获得外键。

如果我将使用e.{id, name}, IDENTITY(e.variable),那么我会得到外键,但它不是同一个数组的一部分:

array (size=2)
  0 => 
    array (size=2)
      'id' => int 1
      'name' => string 'Test' (length=4)
  'countryId' => string 'en' (length=2)

但我想得到:

array (size=2)
  0 => 
    array (size=2)
      'id' => int 1
      'name' => string 'Test' (length=4)
      'countryId' => string 'en' (length=2)

我也知道HINT_INCLUDE_META_COLUMNS但这个解决方案适用于所有外键,然后我无法决定选择哪一个,我希望更灵活。

2 个答案:

答案 0 :(得分:2)

我猜你已经解决了这个问题,但我来自谷歌搜索类似的东西,并决定分享我的经验。

为了获得与使用SQL一样的扁平矩形数据集,Doctrine建议使用部分对象。如果要在结果集中也包含外键,只需删除部分语法并直接列出列:

SELECT e.id, e.name, IDENTITY(e.country) as countryId FROM MyEntity e ...

请确保使用getArrayResult方法检索纯数据数组。

http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#array-hydration

答案 1 :(得分:1)

似乎没有办法做到这一点,因为根据http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#select-expressions'partial'只接受'SimpleStateField'。

所以必须加入“Country c”并选择“partial c。{id}”。