php - Doctrine继承和MySQL连接表限制

标签 php mysql symfony doctrine

我遇到了 mysql 61 个连接表限制的问题。我有超过 57 个不同的类扩展基类,其中包含与评论、喜欢、标签的关联。当我得到最多评论时,MySQL 就崩溃了。 Doctrine 必须加入整个鉴别器映射和注释本身,并按 COUNT(comments) 排序。

有办法解决吗?

是否有另一种方法可以实现对不同类型实体的注释,而无需继承和再次复制相同的关联?

这是实体的示例架构。当我想添加带有注释的新实体类型时,我只需扩展 BaseClass 即可接收这些功能。

enter image description here

最佳答案

如果我理解正确的话,您想要做的就是拥有许多可以评论的不同实体类型。

要做的第一件事是从 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/

相关文章:

php - 如果设置了 pcntl_signal(),我可以依赖在 SIGTERM 上调用的 register_shutdown_function() 吗?

PHP 为 SDK 使用工厂模式

mysql - 将列表插入到Mysql中的单个列中

java - 通过 SSH hibernate

php - laravel 队列与 redis 进程一次,需要运行 php artisan cache :clear for next job process

php - Eloquent 嵌套 whereHas

mysql - 如何使用 JetBrains DataGrip 编辑用户权限?

class - Symfony2 验证约束 'Symfony\Component\Validator\Constraints\MaxLength' 未找到

symfony - Gedmo Doctrine Extensions - Sluggable + Translatable Yaml 配置

symfony1 - 从 Symfony 1.4 升级到 Symfony 2.0 所需的努力