2017-01-06 4 views
1

に接合されたフィールドを追加し、私はテーブルがあります。今まで教義 - 私のsymfonyの(3.0.3)アプリで結果

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

私は会社から小さなフォームに回答を保存する(つまり、アンケート) を私は」次のように教義を経由してこれらを取得されまし:

CRM_COMPANY(comapny_id int型、C:今すぐ

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

、私は外国人のテーブルがある結果セットに会社の名前を追加したいですompanynameテキスト);

だから、私の質問は

  • ..教義でこれを達成するためのベストプラクティスについてです私はCrmCompanyに参加し、余分な 列を選択するビューを作成する必要がありますか?または、DQLを変更するだけです
  • 私はAppBundle/CrmFormResponseエンティティクラスにCOMPANYNAMEを追加する必要がありますか?実際にテーブルのメンバーではありませんが?

これらの対策を避けるこの(共通の)シナリオには、標準的なプラクティスがありますか?

答えて

1

doctrineを使用している場合は、テーブルの代わりにオブジェクトを記述する必要があります。 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() 

編集:yを変更する必要はありません私たちのクエリはそれを行うが、joinaddSelectというクエリは、毎回あなたが使用するたびに追加のクエリを実行することを避けている。$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 line 762 ' - CrmCompanyの完全修飾名を指定したとしても。何か案は? – Black

+0

エンティティCrmCompanyを作成しましたか?そのエンティティは '/ ** @ Entity'を持っていますか?おそらくこれはあなたを助けることができますhttp://stackoverflow.com/a/14707690/2235811 – goto

関連する問題