Ich habe ein querybuilder
alle Einheiten zu bekommen, die ich in eine Anfrage will, aber am Ende macht es 26 SQL-Anfragen.symfony Querybuilder und Erhöhung der SQL-Anfragenummer
Gibt es eine Möglichkeit, es zu tun?
Vielen Dank für jede Antwort/Hilfe. Hier
ist die Query Builder:
$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);
, wenn ich es tun, ich ein anderes Problem haben, wie, warten Sie auf eine Entity-Klasse und gived eine OtherEntity Klasse –
in Ihrem $ builder = $ this-> createQueryBuilder ("message" ) -> innerJoin ("AppBundle: User", "user", "MIT", "message.sender = user.id") -> innerJoin ("AppBundle: Thread", "Gewinde", "MIT", " message.thread = thread.id ") -> innerJoin (" AppBundle: messageMetadata“, "messageMetadata", "MIT", "messageMetadata.message = message.id UND messageMetadata.participant = user.id") ; Du könntest $ builder-> addSelect ('user') hinzufügen ... –
Danke, ich werde es versuchen. In diesem Fall ist das internejoin ok, aber in anderen Fällen in meinem Projekt brauche ich einen leftjoin, denn die sind einige Datensätze wo Der Fremdschlüssel ist null. es gibt keine Möglichkeit, es in einer Anfrage mit dem Abfrage-Generator zu bekommen? –