假设我有两个 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/