【发布时间】:2016-02-22 06:12:56
【问题描述】:
manyToMany 上的 Doctrine 延迟加载。
我在我的博客(帖子)中使用Application\Sonata\ClassificationBundle\Entity\Tag。
/**
* @var string
*
* @ORM\ManyToMany(targetEntity="\Application\Sonata\ClassificationBundle\Entity\Tag", cascade={"persist"} )
* @ORM\JoinTable( name="blog__post_tag" ,
* joinColumns={ @ORM\JoinColumn( name="blog_post_id", referencedColumnName="id" )},
* inverseJoinColumns={ @ORM\JoinColumn( name="tag_id", referencedColumnName="id" )}
* )
*/
private $tags;
工作代码:
$q = $this->createQueryBuilder('p')
->select('p')
->innerJoin('p.tags', 't')
->where('t = :name')->setParameter('name', $tag)
->andWhere('p.isActive = :active')->setParameter('active', TRUE)
->orderBy('p.id', 'DESC');
return $q->getQuery();
从这个输出查询中,我在树枝中使用标签。所以我必须选择帖子和标签。如果我将代码更新为:
$q = $this->createQueryBuilder('p')
->select('p', 't')
->innerJoin('p.tags', 't')
->where('t = :name')->setParameter('name', $tag)
->andWhere('p.isActive = :active')->setParameter('active', TRUE)
->orderBy('p.id', 'DESC');
return $q->getQuery();
我只得到一个标签。
信息:
- 工作代码使用更多 db 查询(1 个查询)。
- 更新的代码有效(不再查询)。但结果我得到了所有帖子只有一个标签。
示例:
- “我的第一篇文章”有标签 ['one','two','three']。
- “我的第二篇文章”有标签 ['two']。
当我使用第一个查询时。工作正常。但是标签的学说延迟加载代码。我得到 (query1) two = "My First post" 的输出有标签 ['one','two','three']。 , “我的第二篇文章”有标签 ['two']。
当我使用第二个查询时。 (query2) two = "My First post" 的输出有标签 ['two']。 , “我的第二篇文章”有标签 ['two']。
我需要帖子中的所有标签。目前我从帖子中只得到一个标签。
【问题讨论】:
标签: php mysql symfony orm doctrine-orm