【问题标题】:How to get foreign key from partial entity in Doctrine?如何从 Doctrine 中的部分实体获取外键?
【发布时间】:2013-04-10 14:56:39
【问题描述】:

我正在使用 Doctrine and 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,但此解决方案适用于所有外键,然后我无法决定要选择哪个外键,我希望更加灵活。

【问题讨论】:

    标签: doctrine-orm doctrine zend-framework2


    【解决方案1】:

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

    要像使用 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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这符合提问者的要求。它创建了一个子数组country,其中只有一项id。我个人认为HINT_INCLUDE_META_COLUMNS 更快,因为它可以节省一些水分。
      • 有没有办法在ManyToMany中选择一些没有partial和with和addSelect语句的字段。这可行,但包括主键,不要让使用 IDENTITY(FK) => $qb->select('partial H.{id, name}')->from('App\Entity\Host', 'H')->leftJoin('H.clusters', 'C')->addSelect('partial C.{id, name}');这不起作用 => $qb->select('H.name')->from('App\Entity\Host', 'H')->leftJoin('H.clusters', 'C')- >addSelect('C.name');
      猜你喜欢
      • 2014-05-14
      • 2014-06-06
      • 2023-02-02
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多