Symfony实体类型,没有延迟加载

时间:2014-10-27 13:33:51

标签: php symfony doctrine-orm lazy-loading

我创建了一个symfony实体表单类型,并使用QueryBuilder来获取实体。

我的Querybuilder看起来像这样:

 $qb = $this
            ->em
            ->getRepository('Namespace\Entity\Domain\Nic')
            ->createQueryBuilder('domainNic')
            ->join('domainNic.article', 'article')
            ->andWhere('article.category = :domainCategory')
            ->setParameter('domainCategory', Article::CATEGORY_DOMAINS)
            ->orderBy('article.title');

下面的表单类型定义如下所示:

$builder->add(
            'withTld',
            'bootstrap_collection',
            array(
                'allow_add' => true,
                'allow_delete' => true,
                'add_button_text' => 'addtext',
                'delete_button_text' => 'deletetext',
                'type' => 'entity',
                'sub_widget_col'  => 5,
                'label' => '***',
                'options' => array(
                    'class' => 'Namespace\Entity\Domain\NIC',
                    'query_builder' => $qb,
                    'property' => 'title'
                )
            )
        );

结果与预期完全一致,但对于每个找到的记录,Symfony都不使用QueryBuilder中的数据。相反,Symfony再次获取每条记录的标题。

有人知道解决方案吗?我希望Symfony使用QueryBuilder中的数据。

1 个答案:

答案 0 :(得分:2)

您的查询构建器中需要额外的select行:

$qb = $this
    ->em
    ->getRepository('Namespace\Entity\Domain\Nic')
    ->createQueryBuilder('domainNic')

    ->addSelect('article') // <---------------- THIS

    ->join('domainNic.article', 'article')
    ->andWhere('article.category = :domainCategory')
    ->setParameter('domainCategory', Article::CATEGORY_DOMAINS)
    ->orderBy('article.title');