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);
, 엔티티 클래스 대기하고 $ 빌더 = $ this-> createQueryBuilder ("메시지"에 OtherEntity 클래스 –
을 gived) innerZoin ("AppBundle : Thread", "thread", "WITH", "BOOK") -> innerJoin ("AppBundle : User", "user", "WITH", "message.sender = user.id")- ("AppBundle : MessageMetadata", "messageMetadata", "WITH", "messageMetadata.message = message.id and messageMetadata.participant! = user.id") ; 당신은 $ builder-> addSelect ('user')를 추가 할 수 있습니다 ... –
고맙습니다, 내가해볼 게.이 경우에는 innerjoin은 괜찮지 만 다른 경우에는 내 프로젝트에서 leftjoin 원인이 필요하다. 외래 키는 null입니다. 쿼리 작성기를 사용하여 요청을 한 번에 가져올 방법이 없습니다. –