Doctrine lazy loading on manyToMany.
我在我的博客(帖子)中使用 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();
从这个输出查询中,我使用了 Twig 中的标签。所以我必须选择帖子和标签。如果我将代码更新为:
$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();
我只得到一个标签。
信息:
- 工作代码使用更多数据库查询(另外 1 个查询)。
- 更新后的代码可以运行(不再有查询)。但结果我的所有帖子只有一个标签。
示例:
- “我的第一篇文章”有标签 ['一','二','三']。
- “我的第二篇文章”有标签 ['two']。
当我使用第一个查询时。工作正常。但是标签的学说延迟加载代码。我得到 (query1) two = "My First post "有标签 ['one','two','third'] 的输出。 ,“我的第二篇文章”有标签['two']。
当我使用第二个查询时。 (query2) two =“My First post ”的输出具有标签 ['two']。 ,“我的第二篇文章”有标签['two']。
I need all tags from the post. Currently i get only one tag form the post.
最佳答案
由于 INNER JOIN 的原因,会出现这样的情况。关于连接类型的很好的答案在这里:https://stackoverflow.com/a/6188334/919567
此版本的查询适合您:
$q = $this->createQueryBuilder('p')
->select('p', 't')
->leftJoin('p.tags', 't')
->where('t = :name')->setParameter('name', $tag)
->andWhere('p.isActive = :active')->setParameter('active', TRUE)
->orderBy('p.id', 'DESC');
return $q->getQuery();
关于php - Symfony Doctrine ORM ManyToMany - 带标签的博客 - 我没有从博客中获取所有标签,没有延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35546883/