ページに表示するアイテムのリストがあり、その上に検索フォームがあり、通常のバックエンドと同様に、これらのアイテムをフィルタリングできます。問題は、結合を使用して既存のクエリに検索条件を追加する方法がわからないことです...これが私が持っているものです:
エンティティに関連付けられたリポジトリで特定のメソッドを使用して、クエリに結合を追加します(多くのクエリを回避するため)。コントローラは次のようになります。
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
}
}
}
ありがとう!