在我的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中实现这一目标的最佳实践。
这个(普通)场景中是否存在避免这些措施的标准做法?
答案 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()
编辑:请注意,您不需要更改查询来执行此操作,但我使用join
和addSelect
的查询可以避免每次使用{{1}时执行额外查询}}