我遇到了 mysql 61 个连接表限制的问题。我有超过 57 个不同的类扩展基类,其中包含与评论、喜欢、标签的关联。当我得到最多评论时,MySQL 就崩溃了。 Doctrine 必须加入整个鉴别器映射和注释本身,并按 COUNT(comments) 排序。
有办法解决吗?
是否有另一种方法可以实现对不同类型实体的注释,而无需继承和再次复制相同的关联?
这是实体的示例架构。当我想添加带有注释的新实体类型时,我只需扩展 BaseClass 即可接收这些功能。
最佳答案
如果我理解正确的话,您想要做的就是拥有许多可以评论的不同实体类型。
要做的第一件事是从 Doctrine 中退一步,考虑完成此任务所需的最简单的表结构。
像这样的东西可能就足够了:
评论
_______________________
| id | type | entity_id |
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
在 Doctrine 中,为了方便起见,在基类中建立双向关系很好,但有时它们并不是最佳选择。也许它会简化您的架构,按实体类型和 ID 直接在评论表上执行查询。
您可能还需要考虑删除基类并使每个实体都是独立的。
由于博客文章可以存在于没有评论的上下文中(例如在不允许评论的博客上),因此 $blog->getComments()
不会很有道理。
进行此更改时,您可以执行以下操作:
$comments = $commentsRepository->findCommentsForEntity($entity);
$commentsCount = count($comments);
并且存储库可以生成所需的查询,将实体作为 entity_id
参数传递,并根据实体类型设置所需的评论类型。
关于php - Doctrine继承和MySQL连接表限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21077161/