2017-01-06 3 views
1

В моей 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 ИНТ, с текст ompanyname);

Итак, мой вопрос о передовой практике для достижения этой цели в Учении ..

  • Должен ли я создать представление, что JOINS CrmCompany и выбирает дополнительный столбец? Или просто изменить DQL
  • Должен ли я добавить COMPANYNAME в класс сущности AppBundle/CrmFormResponse? Хотя он не является членом таблицы?

Существует ли стандартная практика в этом сценарии, позволяющем избежать этих мер?

ответ

1

Если вы используете доктрину, вы должны говорить об объектах вместо таблицы: У вас есть сопоставление, которое позволяет вам делать CrmFormResponse->getCrmCompany? Вы должны добавить отображение CrmCompany в CrmFormResponse сущности так:

В CrmFormResponse.php

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

Тогда запрос должен быть

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

И вы получите название компании, используя

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

EDIT: обратите внимание, что вам не нужно менять y наш запрос сделать это, но мой запрос с join и addSelect избегает вас делать дополнительные запросы каждый раз, когда вы используете $entityCrmFormResponse->getCompany()

+0

спасибо за это; но я получаю 'request.CRITICAL: Uncaught PHP Exception Doctrine \ ORM \ Mapping \ MappingException:« Объект-объект AppBundle \ CrmCompany не может быть найден в «AppBundle \ Entity \ CrmFormResponse # crmCompany». » в /Users/user/Sites/crm/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/MappingException.php строке 762 '- даже если я укажу полное имя для CrmCompany. Есть идеи? – Black

+0

Вы создали сущность CrmCompany? имеет ли этот объект '/ ** @ Entity'? возможно, это может помочь вам http://stackoverflow.com/a/14707690/2235811 – goto