2013-09-03 2 views
1

В контроллере Symfony, у меня есть следующие функции:Названный запрос не найден

protected function getDisplayTags(Expertise $expertise, Person $user){ 
    $rep = $this->getDoctrine()->getRepository('ExpertiseDefaultBundle:Tag'); 

    $q = $rep->createNamedQuery('fetchTagsByExpertise'); //PROBLEM HERE 

    $results = $q->setParameters(array('person'=>$user->getId()), array('expertise'=>$expertise->getId()))->getResult(); 
    return $results; 
} 

, который выдает эту ошибку: No query found named 'fetchTagsByExpertise' on class 'Expertise\DefaultBundle\Entity\Tag'. Хранилище является родовым один предусмотрено доктриной.

Я определил named native queryfetchTagsByExpertise через аннотацию в объекте Tag:

namespace Expertise\DefaultBundle\Entity; 

use Symfony\Component\Validator\Constraints as Assert; 
use Doctrine\ORM\Mapping as ORM; 


/** 
* @ORM\Entity 
* @ORM\Table(name="tag") 
* @ORM\NamedNativeQueries({ 
*  @ORM\NamedNativeQuery(
*   name   = "fetchTagsByExpertise", 
*   resultSetMapping= "mappingTagsByExpertise", 
*   query ="SELECT t.id AS t_id, t.tag AS t_tag, 
        a.expertise_id AS a_expertise_id, 
         COUNT(a.person_id) AS tagcount, 
         SUM(CASE 
          WHEN a.person_id = :person THEN 1 
          ELSE 0 
          END) AS has_curuser 
         FROM expertise_tags a JOIN tag t ON (a.tag_id = t.id) 
         WHERE a.expertise_id = :expertise 
         GROUP BY t.tag , a.expertise_id 
         ORDER BY t.tag" 
*  ), 
* }) 
* @ORM\SqlResultSetMappings({ 
*  @ORM\SqlResultSetMapping(
*   name = "mappingTagsByExpertise", 
*   entities= { 
*    @ORM\EntityResult(
*     entityClass = "__CLASS__", 
*     fields  = { 
*      @ORM\FieldResult(name = "id",  column="t_id"), 
*      @ORM\FieldResult(name = "tag",  column="t_tag"), 
*     } 
*    ), 
*    @ORM\EntityResult(
*     entityClass = "AssociatedTag", 
*     fields  = { 
*      @ORM\FieldResult(name = "expertise_id", column="a_expertise_id"), 
*     } 
*    ) 
*   }, 
*   columns = { 
*    @ORM\ColumnResult("tagcount"), 
*    @ORM\ColumnResult("has_cursuser") 
*   } 
*  ) 
*}) 
*/ 
class Tag 
{ //vanilla Doctrine entity. NO foreign keys 
    // ... 
} 

соединяемых entityClass, AssociatedTag имеет составной первичный ключ, состоящий из (tag_id, expertise_id, person_id). Я попытался включить остальные ключи в запрос и отображение, но это не имеет никакого эффекта.

Есть ли что-то не так с тем, как и где я определил свой родной запрос? Почему репозиторий не может найти его?

+0

Нет уверен, что это, но я вижу, что вы делаете NamedNativeQueries и создание NamedQueries – idipous

+0

@idipous: Я подумал, что тоже. Но 'createNamedNativeQuery' не является функцией. Он выдает эту ошибку: 'Undefined method 'createNamedNativeQuery'' – dnagirl

ответ

3

Правильный способ сделать это - вызвать createNativeNamedQuery вместо createNamedQuery.

protected function getDisplayTags(Expertise $expertise, Person $user){ 
    $rep = $this->getDoctrine()->getRepository('ExpertiseDefaultBundle:Tag'); 

    $q = $rep->createNativeNamedQuery('fetchTagsByExpertise'); // NO PROBLEM HERE ;) 

    $results = $q->setParameters(array('person'=>$user->getId()), array('expertise'=>$expertise->getId()))->getResult(); 

    return $results; 
} 
+0

Я удалил свой автоответ в пользу вашего. Спасибо, что посмотрели старый вопрос и дали лучший ответ! – dnagirl

+0

Эй, @ dnagirl, не беспокойтесь, я столкнулся с той же проблемой, и, поскольку я нашел ответ, я разместил его здесь! –

Смежные вопросы