2015-06-27 138 views
0

我有一个表'内容',您可以为您的内容分配类别。Ajax搜索过滤器

class Content 
{ 

    private $name; 

    private $categories; 

    ... 
    ... 
    ... 

    public function __construct() 
    { 
     $this->categories = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    public function addCategories(\Publicartel\AppBundle\Entity\Category $categories) 
    { 
     $this->categories[] = $categories; 

     return $this; 
    } 

    public function removeCategories(\Publicartel\AppBundle\Entity\Category $categories) 
    { 
     $this->categories->removeElement($categories); 
    } 

    public function setCategories(\Publicartel\AppBundle\Entity\Category $categories = null) 
    { 
     $this->categories = $categories; 

     return $this; 
    } 

    public function getCategories() 
    { 
     return $this->categories; 
    } 

} 

然后我做了一个查询来查找所有类别并将它们显示在页面上。

$categories = $em->getRepository('PublicartelAppBundle:Category')->getAllCategories(); 

public function getAllCategories() 
    { 

    $em = $this->getEntityManager(); 

    $dql = 'SELECT c FROM Publicartel\AppBundle\Entity\Category c'; 

    $query = $this->getEntityManager() 
     ->createQuery($dql) 
     ->setHydrationMode(\Doctrine\ORM\Query::HYDRATE_ARRAY); 

    return $query->execute(); 
} 

显示模板树枝中的所有分类。

<div class="form-group"> 
      <label for="publicartel_appbundle_category_name">Buscar por categoría:</label> 
      <select id='selectCategory' class="form-control select2"> 
       {% for categories in categories %} 
        <option> 
         {{ categories.name }} 
        </option> 
       {% endfor %} 
      </select> 
     </div> 

我分配了一个句柄来选择显示类别,从ajax中传递select中的值。

我有一个功能来检测选择选项中的变化。

保存选择值传递给所述控制器来执行查询:

$('#selectCategory').change(function() { 
       var optionSelect = $(this).val(); 
       console.log(optionSelect); 
       $.ajax({ 
        url: '{{path('playlist_new') }}', 
        data: '&category='+optionSelect, 
        type: 'POST', 
        success: function(catContent) { 

        {% for contentCategory in catContent %} 
         var nameContent = '{{ contentCategory.name }}'; 
         console.log(nameContent); 
        {% endfor %} 

        $('playlist_content_name').html(nameContent); 
       }, 
       error: function(e){ 
        console.log(e.responseText); 
       } 
      }); 
     }); 

$category = $request->query->get('category'); 

    $catContent = $em->getRepository('PublicartelAppBundle:Content')->findByCategory($category); 

return $this->render('PublicartelAppBundle:Playlist:new.html.twig', array(
      'catContent' => $catContent, 
      'categories' => $categories, 
      'entity'  => $entity, 
      'form'  => $form->createView(), 
     )); 

显示从所选类别中的内容的查询:

public function findByCategory($category) 
    { 
     $em = $this->getEntityManager(); 

    $dql = 'SELECT c FROM Publicartel\AppBundle\Entity\Content c'; 

    if (!is_null($category)) { 
     $dql .= " WHERE c.categories.name LIKE :category"; 
    } 

    $query = $this->getEntityManager() 
     ->createQuery($dql) 
     ->setHydrationMode(\Doctrine\ORM\Query::HYDRATE_ARRAY); 

    if (!is_null($category)) { 
     $query->setParameter('category', '%'.$category.'%'); 
    } 

    return $query->getResult(); 
} 

但是控制台总是示出了相同的结果,但在我的选择中选择不同的选项。

是选择您选择的选项,始终显示相同的结果。

回答

0

我不知道是什么类别名称都像,但这里是一个可能的错误:

$dql .= " WHERE c.categories.name LIKE :category"; 

{% for contentCategory in catContent %} 
    var nameContent = '{{ contentCategory.name }}'; 
    console.log(nameContent); 
{% endfor %} 

会导致同一类别总是被所示,如果类别以相同的字母开头。

尝试将$dql变量的LIKE部分更改为=