我试图通过根据文章Joining to Related Records从几个表中加入几个记录来提高效率。在我的模型中,我有一个Tracker,它有一个Linkset,而后者又有多个链接。现在,在我的控制器中,我想通过以下方式遍历这些链接:
foreach ($tracker->getLinkset()->getLinks() as $link) etc..
此外,我的Tracker存储库中的代码如下:
public function findWithLinks(Tracker $tracker)
{
$query = $this->createQueryBuilder('t')
->select('t, ls, l')
->innerJoin('t.linkset', 'ls')
->leftJoin('ls.links', 'l')
->where('t.id = :trackerId')
->setParameters(array(
'trackerId' => $tracker->getId()
));
return $query->getQuery()->getResult();
}
我期望的是,在控制器中,当我遍历foreach表时,Symfony不会对数据库进行任何额外的调用,因为我有一个带有连接链接集和连接链接的Tracker。但是,运行另外两个查询以分别获取Linkset和Links。以下是相关实体的映射:
Linkset实体:
/**
* @var Link
*
* @ORM\ManyToMany(targetEntity="Link", mappedBy="linkset")
*/
private $links;
链接实体
/**
* @var Linkset
*
* @ORM\ManyToMany(targetEntity="Linkset", inversedBy="link")
* @ORM\JoinTable(name="linkcombo",
* joinColumns={
* @ORM\JoinColumn(name="link_id", referencedColumnName="id", onDelete="CASCADE")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="linkset_id", referencedColumnName="id", onDelete="CASCADE")
* }
* )
*/
private $linkset;
答案 0 :(得分:0)
也许你应该将你的“foreach”陈述改为这样的话?
foreach( $tracker->getLinkset() as $linkset ) {
foreach( $linkset->getLinks() as $link ) {
....
}
}
我希望它有所帮助!
修改强>:
如果“linkset”和“link”之间的关系只是一个很多关系,我会将注释更改为:
链接集实体:
/**
* @ORM\ManyToMany(targetEntity="Link")
**/
private $links;
链接实体:
/**
* @ORM\ManyToMany(targetEntity="Linkset")
*/
这应该假设:
我确信更有经验的symfony2可能对你有所帮助,我最近开始使用symfony