Doctrine 2 - 加入的实体仍然是代理并在请求后生成两个查询

Doctrine 2 - Joined entity is still a proxy and generating two queries after request

$news = \DB::getEntityManager()->createQueryBuilder()
    ->select('n')
    ->from('Model\News', 'n')
    ->join('n.category', 'c')
    ->join('n.locales', 'l')
    ->where('l.language = :lang AND n.id = :id AND n.published = 1')
    ->setParameter('id', $news_id)
    ->setParameter('lang', $lang)
    ->getQuery()
    ->getResult();

$news->category->getName();

此代码生成两个查询而不是一个。 为什么?

获得我的 $news 实体后,category 属性 仍然是 Doctrine 代理 class (Application\Proxies\__CG__\Model\News\Category)。 \Model\News\Category 的实例将仅在获取一些类别数据(例如 $news->category->getName())并生成 additional SQL 查询后加载.

如何让 Doctrine 下载 \Model\News 和与之相关 \Model\News\Category 只有一个查询?

下面是来自 \Model\Newscategory 字段的配置,带有注释:

/**
 * @ManyToOne(targetEntity="\Model\News\Category", inversedBy="news", fetch="EAGER")
 */
public $category;

如您所见...EAGER 不工作...

将您的第一行更改为 ->select('n, c'),这样 Doctrine 将滋润您的新闻和类别实体。