2017-01-19 6 views
0

に多くの関係を持つエンティティオブジェクトを検索し、私は三つのパラメータによって、ユーザーを検索するフォームを作ってるんですカテゴリにmanyToToを、その他のパラメータにManyToManyの関係があります。私はcategorieで検索したい場合は、私はこのコードを使用する必要があるとしますsymfonyの多くの

$users = $em->getRepository('CASUsuariosBundle:Artist')->findByCategory($category); 

しかし、どのように私は他のパラメータでそれを行うことができますか?特に、複数の選択肢であるサブカテゴリを使用します。

Userエンティティ:

/** 
* @ORM\ManyToOne(targetEntity="\CAS\EventBundle\Entity\Category", inversedBy="artists") 
* @ORM\JoinColumn(name="category_id", referencedColumnName="id") 
*/ 
private $category; 

/** 
* @ORM\ManyToMany(targetEntity="\CAS\EventBundle\Entity\Subcategory", inversedBy="artists") 
* @ORM\JoinTable(name="artists_subcategories", 
*  joinColumns={@ORM\JoinColumn(name="artist_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="subcategory_id", referencedColumnName="id")} 
*  ) 
*/ 
private $subcategories; 

/** 
* @ORM\ManyToMany(targetEntity="\CAS\EventBundle\Entity\Province", inversedBy="artists") 
* @ORM\JoinTable(name="artists_provinces", 
*  joinColumns={@ORM\JoinColumn(name="artist_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="province_id", referencedColumnName="id")} 
*  ) 
*/ 
protected $provinces; 

はSearchController:

public function searchAction(Request $request) { 
    $search = new Search(); 
    $em = $this->getDoctrine()->getManager(); 
    $form = $this->createForm(new SearchType($this->getDoctrine()->getManager()), $search); 
    $form->setData($search); 

    $form->handleRequest($request); 

    if ($form->isValid() || $form->isSubmitted()) { 
     $category = $form->get('category')->getData(); 
     $subcategories = $form->get('subcategories')->getData(); 
     $province = $form->get('province')->getData(); 

     return $this->showAction($category, $subcategories, $province); 
    } 

    return $this->render('CASUsuariosBundle:Profile:search.html.twig', array(
     'form' => $form->createView() 
    )); 
} 

public function showAction($category, $subcategories, $province) { 
    return $this->render('CASUsuariosBundle:Profile:search_results.html.twig'); 
} 

答えて

0

あなたはさらに多くの制御をしたい場合は、必ずその意志QueryBuilderを作成することができます

$users = $em->getRepository('CASUsuariosBundle:Artist')->findBy([ 
    'category' => $categories, 
    'province' => $province, 
    //... 
]); 

を行うことができるはずあなた自身の教義の要求を偽造することができます:

参考

$em = $this->getDoctrine()->getManager(); 
$query = $em->createQuery(
    'SELECT p 
    FROM AppBundle:Product p 
    WHERE p.price > :price 
    ORDER BY p.price ASC' 
)->setParameter('price', 19.99); 

$products = $query->getResult(); 

:symfonyのドキュメントから

http://symfony.com/doc/current/doctrine.html#querying-for-objects-with-dql

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html
関連する問題