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

标签 php mysql doctrine-orm doctrine

$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 代理类(Application\Proxies\__CG__\Model\News\Category)。 \Model\News\Category 的实例仅在获取部分类别数据后才会加载(例如,$news->category->getName())并且它正在生成附加 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 能够水合您的新闻和类别实体。

关于php - Doctrine 2 - 加入的实体仍然是代理并在请求后生成两个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32014720/

相关文章:

mysql - 两个 Laravel 应用可以使用同一个数据库吗?

zend-framework - Zend Framework 和 Doctrine 2 - 你把你的实体放在哪里?

php - 在 PHP 中堆叠多个三元运算符

mysql - 在 memcached 中存储不同案例类的列表

php - 替换 png 内的颜色

MySQL SELECT 列 FROM 表 WHERE 列为 NULL

entity-framework - Doctrine 和多实体关联

php - 学说 2 可排序

php - 上传文件到文件结构,形成数据到数据库

php - Doctrine 2 preUpdate 事件 - 插入时未触发?