我的Symfony(3.3)表單EntityType顯示爲選擇輸入並列出了我們在數據庫中擁有的所有客戶端。客戶端實體與使用懶惰模式的其他幾個實體關聯。
當選擇框被渲染時,發出204個數據庫查詢。我懷疑表單組件根據每個查詢結果調用setter,導致加載許多額外的數據庫查詢。我們可以將關聯映射設置爲「EAGER」,或者在窗體的querybuilder選項中使用join('...') - > addSelect('...')方法強制數據成爲結果的一部分,但當涉及多個實體時,水合過程仍然昂貴。你可以看到,我試圖使用Doctrine Query HINT,希望它能解決問題,但它沒有改變任何東西。Symfony - 在EntityType查詢生成器的水合過程中丟棄關聯字段
那麼,這樣的用例有什麼辦法呢?
我應該怎麼做才能得到我需要填充下拉輸入的字段?
這裏是我試過到目前爲止:
$builder->add('parent', EntityType::class, [
'class' => Client::class,
,'required' => false
,'multiple' => false
,'query_builder' => function (EntityRepository $er) {
$qb = $er ->createQueryBuilder('c')
// All I want doctrine to fetch are the following fields
->select('PARTIAL c.{id,uuid,name,shortName}');
// I expected this flag to help but it does not change the total amount of queries executed
$qb->getQuery()->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true);
return $qb;
}
])…
謝謝。