【问题标题】:Doctrine get all field names with associations教义获取所有具有关联的字段名称
【发布时间】:2014-04-16 13:21:26
【问题描述】:

我已经知道如何获取实体的字段名,但如何也获取所有关联的类名?

$em->getClassMetadata('Product')->getFieldNames();

这仅获取类属性,但我希望在嵌套数组中获取关联名称,例如,如果我有与产品关联的客户,我也想获取所有客户类属性名称。

【问题讨论】:

  • 你不能遍历给定的关联并请求它们的元数据吗?

标签: php symfony doctrine-orm doctrine


【解决方案1】:

一个班轮:

array_keys($entityManager->getMetadataFactory()->getMetadataFor($entity)->reflFields)

【讨论】:

    【解决方案2】:

    您也可以获取关联的字段名称然后合并它们

    $properties = $em->getClassMetadata('YourBundle:Product')->getFieldNames();
    $output = array_merge(
                  $properties, 
                  $em->getClassMetadata('YourBundle:Product')->getAssociationNames()
    );
    

    【讨论】:

      【解决方案3】:

      只是一点提示。

      我更愿意重新组织架构的方式,以便正确检索所有相关字段。例如,根据您的问题“如果我有与产品相关联的客户”这一行,我相信您与客户和产品之间至少存在一对一或一对多的关系。如果您在 ORM 中声明这些关系,如果您使用 YAML 或注释或任何首选/让步方式,您将能够使用标准 DQL 查询/或 get 方法检索字段名称。

      从这里得到的要点是,当您期望检索关联的字段时,最好首先通过提供相关关系来建立可靠的数据库架构。从长远来看,这将使您必须完成的工作减少一半,并提高系统/编码实践的性能。

      希望这会有所帮助, 干杯!

      【讨论】:

        【解决方案4】:

        我最终将它们合并到一个数组中,首先获取每个关联名称,然后获取每个名称的字段名称。

        【讨论】:

          猜你喜欢
          • 2017-04-12
          • 2020-02-06
          • 2023-04-01
          • 2022-01-08
          • 1970-01-01
          • 2012-06-14
          • 2021-09-03
          • 1970-01-01
          相关资源
          最近更新 更多