1

假设我有两个 Doctrine 实体:

用户和消息

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

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

但现在我想对消息进行一些更复杂的过滤。例如:最大年龄、最大计数、将某些单词列入黑名单等。因此,实体获取消息的默认 getter 方法是不够的。

我该如何解决这个问题?

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

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

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

4

1 回答 1

2

在这种特定情况下,我肯定会将 Message 设为它自己的聚合,因此会为其创建一个 Repository,并删除从 User 到 Message 的关系。无论如何,用户可以有很多消息,因此使用其他方法将非常低​​效。

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

class MessageRepository
{
    public function findByUser(User $user) {
        // ...
    }
    public function findReadMessagesByUser(User $user) {
        // ...
    }
}
于 2012-07-10T21:38:10.937 回答