0
我做了一个querybuilder
把我想要的所有实体放到一个请求中,但最后它做了26个sql请求。symfony querybuilder和sql请求号码的增加
有没有办法做到这一点?
谢谢你的回复/帮助。
这里是查询生成器:
$builder = $this->createQueryBuilder("message")
->innerJoin("AppBundle:User", "user", "WITH", "message.sender = user.id")
->innerJoin("AppBundle:Thread", "thread", "WITH", "message.thread = thread.id")
->innerJoin("AppBundle:MessageMetadata", "messageMetadata", "WITH", "messageMetadata.message = message.id AND messageMetadata.participant != user.id")
;
$builder = $this->filterSoftdelete($builder, $user);
if($filters != null) {
foreach ($filters as $key => $value) {
$builder->andWhere("(message.recipient = :id AND user.firstname LIKE '%". $value ."%') OR
(message.recipient = :id AND user.lastname LIKE '%". $value ."%') OR
(message.recipient = :id AND thread.subject LIKE '%". $value ."%')")
->setParameter("id", $user->getId());;
}
} else {
$builder->andWhere("message.recipient = :id or message.sender = :id")
->setParameter("id", $user->getId());
}
if($ordering != null) {
foreach ($ordering as $key => $value) {
if($key == "subject") {
$builder->addOrderBy("thread.subject", $value);
} else if($key == "createdAt") {
$builder->addOrderBy("message." . $key, $value);
} else {
$builder->addOrderBy("messageMetadata.isRead", "desc");
}
}
} else {
$builder->addOrderBy("messageMetadata.isRead", "desc");
}
return $this->query($builder);
当我这样做,我有一个问题一样,等待一个实体类,并在$建设者= $这个 - > createQueryBuilder(“消息”红粉的OtherEntity类 –
) - > innerJoin(“AppBundle:User”,“user”,“WITH”,“message.sender = user.id”) - > innerJoin(“AppBundle:Thread”,“thread”,“WITH” (“AppBundle:MessageMetadata”,“messageMetadata”,“WITH”,“messageMetadata.message = message.id AND messageMetadata.participant!= user.id”) ; message.thread = thread.id“) - > innerJoin你可以添加$ builder-> addSelect('user')... –
谢谢,我会试试。在这种情况下innerjoin是可以的,但在其他情况下,在我的项目中,我需要一个leftjoin导致一些记录在哪里外键是空的。无法通过查询构建器在一个请求中获取它? –