【发布时间】:2026-01-11 16:40:01
【问题描述】:
背景
我正在开发一个作品集网站,该网站相当简单,大部分作品都在画廊中。我有一组数据库表,它们全部链接起来,以不同的方式检索和过滤画廊,从顶部开始,如下所示:
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 路径的方法。我仍然需要能够使用这些。
【问题讨论】:
标签: php symfony doctrine-orm entity