我有一個在頁面上顯示的項目列表,其上方有一個搜索表單,用於過濾這些項目,就像在任何通常的後端中一樣。問題是我不知道如何將搜索條件添加到帶有連接的現有查詢中...以下是我的:如何使用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的答案也會起作用,但無法按日期範圍進行過濾。 – 2016-03-04 12:58:33
感謝您對LexikFormFilterBundle的建議,我對過濾器查詢中的所有和環境變得厭惡。過濾器包在那裏節省了大量的工作和複雜性:) – Sharpy35 2017-04-27 12:29:45