背景
我在一个投资组合网站上工作,这个网站相当简单,大部分作品都在画廊里。我有一组数据库表,它们都链接起来以不同的方式检索和过滤画廊,从顶部开始,如下所示:
GalleryCategory
-> Gallery
->GalleryImage
问题
我面临的问题仅在画廊类别页面上,我正在查看给定类别中的所有画廊,然后画廊中的画廊图像返回。
我的控制器目前看起来像这样:
public function galleryCategoryAction($categoryId)
{
$em = $this->getDoctrine()->getManager();
$category = $em->getRepository('SeerUKDWrightGalleryBundle:GalleryCategory')->findById($categoryId);
$galleries = $category->getGalleries();
$galleryImages = [ ];
foreach ($galleries as $i => $gallery)
{
$galleryImages[$gallery->getId()] = $em->getRepository('SeerUKDWrightGalleryBundle:GalleryImage')
->findOneByGalleryId($gallery->getId());
}
return $this->render('SeerUKDWrightGalleryBundle:Gallery:category.html.twig', array(
'category' => $category,
'galleries' => $galleries,
'galleryImages' => $galleryImages
));
}
现在,尽管这确实有效,但正是我想要的,我觉得它只是......错了!将画廊归入一个类别既好又干净:
$category = $em->getRepository('SeerUKDWrightGalleryBundle:GalleryCategory')->findById($categoryId);
$galleries = $category->getGalleries();
但是,我看到获得每个画廊的第一张图像的唯一方法是遍历它们并检索每个实体。就像我说的,这似乎是错误的。
我所拥有的唯一改进这一点的其他建议是使用画廊实体中的实体管理器来获取实体内的图像,这当然会破坏 Doctrine 的用途。
结论
总之,我该如何做得更好?必须有一个地方可以做得更好,我只是 Symfony 的新手。查看文档没有帮助...
额外细节
我忘了说,仍然能够使用实体的能力是必要的,我对实体有一些稍后使用的方法。例如,在 GalleryImage 实体中,我有获取图像的系统路径和 Web 路径的方法。我仍然需要能够使用这些。