gpt4 book ai didi

doctrine - 我可以在 Doctrine 2 实体方法中包含便捷查询吗?

转载 作者:行者123 更新时间:2023-12-02 19:10:55 25 4
gpt4 key购买 nike

我想在我的 Doctrine 2 实体中包含一些附加函数,以包含我必须经常运行的代码。例如:

用户 - 有很多帖子
发布 - 有一个用户

我已经有一个函数 $user->getPosts(),但这会返回我的所有帖子。我想写一个 $user->getActivePosts(),如下所示:

$user->getPosts()->where('active = true')//如果可能的话
或:
$em->getRepository('Posts')->findBy(array('user'=>$user,'active'=>true))//如果这样更方便

据我所知,没有办法通过实体本身返回实体管理器,所以我唯一的选择是

class User {
function getActivePosts() {
$all_posts = $this->getPosts();
$active_posts = new ArrayCollection();
foreach ($all_posts as $post) {
if ($post->getActive()) {
$active_posts->add($post);
}
}
return $active_posts;
}

但是,这要求我将所有帖子加载到我的实体管理器中,而我实际上只想要其中的一小部分,并且它要求我在 PHP 中进行过滤,而在 PHP 中这样做会更合适。 SQL层。有什么方法可以完成我想要在实体内部执行的操作,还是必须在实体外部创建代码?

最佳答案

我认为您应该在 PostRepository 而不是实体模型上实现该方法。

我尝试将所有与模型相关的逻辑保留在“特定于域”方法后面的存储库中。这样,如果您更改表示帖子是否处于事件状态的方式,您只需更改单个方法的实现,而不必查找分散在您的帖子中的所有 active = true 语句。应用程序或在“不相关”实体模型中进行更改。

类似这样的事情

PostRepository extends EntityRepository {
public function findActiveByUser($user){
// whatever it takes to get the active posts
}
}

关于doctrine - 我可以在 Doctrine 2 实体方法中包含便捷查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6946759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com