일반적인 백엔드처럼 이러한 항목을 필터링 할 수있는 검색 양식이있는 페이지에 표시 할 항목 목록이 있습니다. 문제는 조인과 함께 기존 쿼리에 검색 조건을 추가하는 방법을 알지 못한다는 것입니다. 다음은 내가 가지고있는 것입니다.Symfony2를 사용하여 검색 필터 양식을 구현하는 방법
엔터티에 연결된 리포지토리에서 특정 메서드를 사용하여 쿼리 (많은 쿼리를 피하기 위해). 컨트롤러는 다음과 같습니다 저장소에
class ModelController extends Controller
{
public function indexAction(Request $request)
{
// ...
$em = $this->getDoctrine()->getManager();
$query = $em->getRepository('AcmeDemoBundle:Item')->getList();
}
}
getList
방법은 다음과 같습니다
use Doctrine\ORM\EntityRepository;
// ...
class ItemRepository extends EntityRepository
{
public function getList()
{
$queryBuilder = $this
->createQueryBuilder('i')
->innerJoin('i.brand', 'b');
return $queryBuilder->getQuery();
}
}
나는 항목을 검색하기 위해 여러 분야와
ItemSearchType
양식 객체를 만들었습니다.
검색 양식에 제공된 데이터에서 검색 기준을 쉽게 추가하여 필터링 된 항목을 표시하려면 어떻게합니까?
이 검색 양식에 관한 내 컨트롤러에 무엇이입니다 :
class ModelController extends Controller
{
public function indexAction(Request $request)
{
// ...
if ($request->getMethod() === 'POST') {
$searchForm->bindRequest($request);
if ($searchForm->isValid()) {
$searchCriteria = $searchForm->getData();
// Do something with this data! ...but I don't know how
}
}
}
감사합니다!
필요 이것이 최고의 대답입니다. LexikFormFilterBundle은 엔티티 필터링 문제를 해결합니다. AdrienBrault의 답변도 제대로 작동하지만, 즉 daterange로 필터링 할 수는 없습니다. –
LexikFormFilterBundle에 대한 조언을 주셔서 감사합니다. 필터 쿼리의 모든 andWheres에 질 렸습니다. 필터 번들은 많은 작업과 복잡성을 절약합니다 :) – Sharpy35