몇 개의 연관이있는 엔티티가 몇 개 있습니다. 이제 잘로드되고 있습니다. 그래서 기본적으로 주소 엔티티와 관련된 고객 엔티티가 있습니다. 고객과 관련된 영수증 거래도 있습니다.
작은 고객 세트를 검색 할 때 관련 영수증을 검색하고 싶지만 그 세트는 엄청납니다. 지난 2 주 동안의 영수증 만 원합니다.
커스텀 리포지토리를 사용한 다음 customer-> getRecentReceipts ()와 같은 함수를 사용할 수 있다고 생각했지만 고객 엔티티가 리포지토리에 대해 알지 못하기 때문에 작동하지 않습니다. 그리고이 포럼에서 읽은 사람들은 저장소를 이런 식으로 사용하지 말라고 말하는 것 같습니다. 영수증 엔터티의로드를 제한하려면 어떻게 구성해야합니까? 나는 모든 것을로드 한 다음 PHP 루틴으로 정렬하는 것을 피하려고합니다.
이를 위해 리포지토리 메소드를 만드는 것은 잘못된 것이 아닙니다. 당신은하지 않습니다 이 그 영수증을 얻기 위해 고객 엔티티와 직접 거래 할 수 있습니다.
ReceiptRepository에서 다음과 같은 간단한 방법을 만들 것입니다 (구문이 옳지 않을 수 있습니다. 지금은 IDE가 편리하지 않습니다)
getReceiptsForCustomerByDate(Customer $customer, \DateTime $createdAfter=null) {
if (!$createdAfter instanceof \DateTime) {
$createdAfter = new \DateTime('now -2 weeks');
}
$qb = $this->getEntityManager()->createQueryBuilder();
return $qb->select('c, r')
->from('YourBundle:Customer', 'c')
->join('c.receipt', 'r')
->where($qb->expr()->eq('c', ':customer')
->andWhere($qb->expr()->gt('r.createdAt', ':createdAfter')
->setParameter('createdAfter', $createdAfter)
->setParameter('customer', $customer)
->getQuery()->getResult();
}
위는 가져온 고객 엔티티가 관련 영수증 만 보유 함을 의미합니다 . 영수증을 지연로드하지 않았기 때문에 $ customer-> getReceipts ()는 날짜별로 지정한 영수증 만 반환합니다.
아니요, Customer 엔터티에서 호출 할 수는 없지만 컨트롤러 메서드에서 호출 할 수없는 이유는 없습니다. 이것은 Symfony에서 작업을 수행하는 완벽하게 유효한 방법입니다.
고객 배열을 전달하여 많은 고객 영수증을 받도록 쉽게 수정할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다