在我的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()
编辑:请注意,您不需要更改查询来执行此操作,但是我使用join
和addSelect
的查询避免您每次使用$entityCrmFormResponse->getCompany()
时执行额外的查询