ページに表示するアイテムのリストがあり、その上に検索フォームがあり、通常のバックエンドのようにこれらのアイテムをフィルタリングします。問題は、既存のクエリにジョインで検索条件を追加する方法がわからないことです。これは私が持っているものです: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
}
}
}
ありがとう!ここで
を必要とするためにそれが壊れています:結果のコードは、githubのに移動したくない場合には、READMEから
クリーナーですこれは最高の答えです。 LexikFormFilterBundleはエンティティのフィルタリングの問題を解決します。 AdrienBraultの回答も同様に機能しますが、つまりdaterangeでフィルタリングできません。 –
LexikFormFilterBundleのアドバイスをいただきありがとうございます。フィルタークエリのandWheresのすべてにうんざりしていました。フィルタバンドルは多くの作業と複雑さを節約します:) – Sharpy35