В контроллере 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)
. Я попытался включить остальные ключи в запрос и отображение, но это не имеет никакого эффекта.
Есть ли что-то не так с тем, как и где я определил свой родной запрос? Почему репозиторий не может найти его?
Нет уверен, что это, но я вижу, что вы делаете NamedNativeQueries и создание NamedQueries – idipous
@idipous: Я подумал, что тоже. Но 'createNamedNativeQuery' не является функцией. Он выдает эту ошибку: 'Undefined method 'createNamedNativeQuery'' – dnagirl