【问题标题】: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】:
我最终将它们合并到一个数组中,首先获取每个关联名称,然后获取每个名称的字段名称。