我有一个61连接表限制mysql的问题。我有57个不同的类扩展基类,其中包含与评论,喜欢,标签的关联。当我得到大多数评论时,MySQL正在崩溃。 Doctrine必须加入整个鉴别器地图和评论本身,并按COUNT(评论)排序。
有办法解决这个问题吗?
还有另一种方法可以在没有继承的情况下为不同类型的实体实现注释并再次复制相同的关联吗?
以下是实体的示例模式。当我想添加带注释的新实体类型时,喜欢我只是扩展BaseClass来接收这些功能。
答案 0 :(得分:0)
如果我理解你正在尝试做的是有许多不同的实体类型可以评论。
要做的第一件事就是退出Doctrine以及有关实现此目的所需的最简单的表结构的事情。
这样的事情就足够了:
评论
_______________________
| id | type | entity_id |
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
在Doctrine中,为了方便起见,在基类中建立双向关系是很好的,但有时它们不是最佳选择。也许它会简化您的体系结构,以便按实体类型和ID直接在评论表上执行查询。
您可能还想考虑删除Base类并让每个实体都是独立的。
由于博客帖子可以存在于没有评论的上下文中(例如,在不允许评论的博客上),因此$blog->getComments()
没有多大意义。
进行此更改后,您可以执行以下操作:
$comments = $commentsRepository->findCommentsForEntity($entity);
$commentsCount = count($comments);
并且存储库可以生成所需的查询,将实体作为entity_id
参数传递,并根据实体类型设置所需的注释类型。