mysql - 学说复杂实体

标签 mysql orm symfony doctrine-orm php-5.3

假设我有两个 Doctrine 实体:

用户和消息

每个用户可以有 'n' 条消息。

现在我想显示用户的邮箱,所以我从 ORM 中获取用户实体,并从该实体中获取所有消息。到目前为止没问题。

但现在我想对消息进行一些更复杂的过滤。例如:Max age,Max count,将某些词列入黑名单等。所以实体默认的获取消息的getter方法是不够的。

我该如何解决这个问题?

实体存储库是我发现的第一件事,但后来我不得不从用户对象外部询问这个存储库,这打破了用户和消息的关系(存储库->getMessagesForUser(userId,...)而不是用户->getMessages(...)) 对我来说这看起来不像是“干净的”OOP 解决方案。

我能想到的另一种方法是忽略所有这些花哨的 ORM 东西并编写我自己的模型并从最低 ORM 甚至 DBAL 层上的数据库获取信息。并且以太包装实体或手动填充我自己的模型的字段。但后来我问自己:“我为什么要使用 Doctrine?”。

那么这种情况下的最佳做法是什么。顺便说一句,我使用 Symfony 2。

最佳答案

在这种特定情况下,我肯定会将消息设为自己的 aggregate ,因此会为它创建一个存储库,并删除从用户到消息的关系。无论如何,用户可能有很多消息,因此使用其他方法效率很低。

然后我会在 MessageRepository 中创建特定的方法:

class MessageRepository
{
    public function findByUser(User $user) {
        // ...
    }
    public function findReadMessagesByUser(User $user) {
        // ...
    }
}

关于mysql - 学说复杂实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11422178/

相关文章:

c# - 通过 HTTP 与 MySQL 数据库交互

mysql - 创建过程错误 1046 (3D000) : No database selected

asp.net-mvc-3 - 在 Entity Framework 中使用数据库优先方法

mysql - 为什么 Doctrine 2 迁移在 Symfony 项目中悄无声息地失败了?

Symfony 2 注册 Doctrine 监听器不起作用

mysql - SQL 查询仅在第二部分中进行并集和随机排序

MySQL AUTO_INCREMENT 不会在任何 INSERT 查询上增加

.net - ORM 还是直接 SQL?

java - HibernateTemplate 复合键获取值 null

php - Symfony2 - 保留实体而不保留其关联