Symfony 具有一对多关系和多个使用原则的条件的QueryBuilder
我会尽力解释我的问题。我有一条与另一个实体相关的消息,称为Reply(一条消息可以有零个或n个回复),我想考虑以下情况:Symfony 具有一对多关系和多个使用原则的条件的QueryBuilder,symfony,doctrine,entity-relationship,query-builder,Symfony,Doctrine,Entity Relationship,Query Builder,我会尽力解释我的问题。我有一条与另一个实体相关的消息,称为Reply(一条消息可以有零个或n个回复),我想考虑以下情况: 如果UserA向UserB创建了一条消息(UserA是创建者) 但是用户B没有回复消息我不想收到消息 与上面相同,但用户B回复了消息。我要拿到票 邮件及其答复(如果答复存在) 如果UserB向UserA发送了一条消息,我想用 如果存在答复,则返回其答复 我的消息实体(我将只放置OneToMany关系): 我不是一个用条令构建查询的专家,我不知道现在如何控制我的所有案例,如
我不是一个用条令构建查询的专家,我不知道现在如何控制我的所有案例,如果有人能帮助我,我将非常感激这就是QueryBuilders的魅力所在。您可以创建如下语句:
$query = $this->createQueryBuilder('message')
->where('message.creator = :username or message.receiver = :username')
->leftJoin('message.replies', 'replies')
->andWhere('replies.user = :username')
->setParameter('username', $username);
if (some_condition) {
$query->andWhere('some_property');
}
if (some_other_condition) {
$query->andWhere('some_property');
}
return $query->getQuery()->getResults();
不要使用
->getResult()代码>在您的AppBundle\Repository\MessageRepository
Repository中,因为有时您需要多次使用它,例如:BreadcrumbsBundle
需要查询(不是结果,因为它受性能影响)不应该getrepries()
已经有了每个回复,因为这是一个关系?也许自我参照关系也能帮助你变得更有活力。在条令页面中,他们以User
为例。有时,您希望拥有“朋友”,而这些朋友也只是“用户”对象。因此,您可以将用户对象用作自引用。回复也是一条信息,因此我相信您也可以自行参考它,借助symfony的强大功能,您应该可以非常轻松地获取数据。
$query = $this->createQueryBuilder('message')
->where('message.creator = :username or message.receiver = :username')
->leftJoin('message.replies', 'replies')
->andWhere('replies.user = :username')
->setParameter('username', $username)
->getQuery();
$sent = $query->getResult();
return $sent;
$query = $this->createQueryBuilder('message')
->where('message.creator = :username or message.receiver = :username')
->leftJoin('message.replies', 'replies')
->andWhere('replies.user = :username')
->setParameter('username', $username);
if (some_condition) {
$query->andWhere('some_property');
}
if (some_other_condition) {
$query->andWhere('some_property');
}
return $query->getQuery()->getResults();