doctrine - 将join字段添加到结果中

时间:2017-01-06 10:17:20

标签: symfony doctrine-orm

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

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

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

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

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

CRM_COMPANY(comapny_id int,companyname text);

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

  • 我应该创建一个加入CrmCompany并选择额外的视图 柱?或者只是修改DQL
  • 我应该将COMPANYNAME添加到AppBundle / CrmFormResponse实体类吗?虽然它不是真正的桌子成员吗?

这个(普通)场景中是否存在避免这些措施的标准做法?

1 个答案:

答案 0 :(得分:1)

如果您使用的是教义,则应该谈论对象而不是表格: 你有一个允许你做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的查询可以避免每次使用{{1}时执行额外查询}}