私はquerybuilder
を作成して、1つのリクエストに含めるすべてのエンティティを取得しましたが、最後に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);
、Entityクラスを待ち、そしてあなたの$ビルダー=の$ this - > createQueryBuilder(「メッセージ」にOtherEntityクラス –
をgived ( "AppBundle:Thread"、 "thread"、 "WITH"、 "WITH"、 "WITH"、 "messageSender = user.id") - > innerJoin messageMessage.message = message.idとmessageMetadata.participant!= user.id ") ;" innerJoin( "AppBundle:MessageMetadata"、 "messageMetadata"、 "WITH"、 "messageMetadata.message = message.idおよびmessageMetadata.participant!あなたは$ builder-> addSelect( 'user')を追加することができます... –
ありがとう、私は試してみてください。この場合、innerjoinはOKですが、私のプロジェクトの他のケースでは、私はleftjoin原因がいくつかのレコードです外部キーはnullです。クエリビルダを使って1回のリクエストでそれを取得する方法はありませんか? –