原则 - 将联接字段添加到结果



在我的Symfony(3.0.3)应用程序中,我有一个表格:

 CRM_FORM_RESPONSE(form_response_id int, form_id int, company_id int, response text) 

我存储公司对小表格(即问卷)的回复 到目前为止,我一直在通过教义检索这些内容,如下所示:

$qb = $doc->getEntityManager ()->createQueryBuilder ();
$query = $qb->select ( 'u' )->from ( 'AppBundle:CrmFormResponse', 'u' )->getQuery();
$result = $query->getResult ();

现在,我想将公司的名称添加到结果集中,其中外部表是:

CRM_COMPANY(comapny_id int,公司名称文本);

所以,我的问题是关于在教义中实现这一目标的最佳实践。

  • 我是否应该创建一个视图来加入 CrmCompany 并选择额外的列?或者只是修改 DQL
  • 我是否应该将 COMPANYNAME 添加到 AppBundle/CrmFormResponse 实体类中? 即使它不是真正的表成员?

在这种(常见)情况下,是否有避免这些措施的标准做法?

如果你使用教义,你应该说对象而不是表格:你有映射可以让你做CrmFormResponse->getCrmCompany吗?您应该以这种方式在 CrmFormResponse 实体中添加 CrmCompany 的映射:

在 CrmFormResponse 中.php

/**
 * @ManyToOne(targetEntity="CrmCompany")
 */
 $crmCompany

然后,查询应该是

$query = $qb
      ->select('u')
      ->from ('AppBundle:CrmFormResponse', 'u')
      ->addSelect('company')
      ->innerJoin('u.crmCompany', 'company')
      ->getQuery();

您可以使用

$entityCrmFormResponse->getCompany()->getName()

编辑:请注意,您不需要更改查询来执行此操作,但是我使用joinaddSelect的查询避免您每次使用$entityCrmFormResponse->getCompany()时执行额外的查询

相关内容

  • 没有找到相关文章

最新更新