2016-01-26 3 views
2

Как я могу получить столбец не отображаемый в результате собственного запроса?Как получить не отображаемый столбец в результате собственного запроса Doctrine

Мой запрос:

$query = $this->getEntityManager()->createNativeQuery(
      "SELECT m.id, m.title, MATCH(m.title) AGAINST('$slug') AS score " 
      . "FROM music AS m " 
      . "ORDER BY score DESC LIMIT 100", $rsm); 

Колонка score не отображается в сущности и не имеют доступа к его стоимости от Twig. Можно ли добавить этот столбец в сущность только для этого запроса?

+0

Вы попробовали? Это работает? Вы получили сообщение об ошибке? Какая ошибка? – Wilt

+0

запрос не получает ошибку, но когда я попробую показать результат в Twig Я получил это: Метод «оценка» для объекта «PlayerBundle \ Entity \ Music» не существует в src \ PlayerBundle \ Resources \ views \ Default \ search.html.twig в строке 12 потому что оценка не отображается в классе Entity – MonkeyOne

+0

Я думаю, вы должны просто убедиться, что ваша модель базы данных и объектная модель соответствуют. В противном случае все будет очень сложно и очень глючит ... – Wilt

ответ

2

Если вы хотите, чтобы показать счет внутри шаблона Twig, вы можете попробовать следующие шаги:

1) Добавить атрибут $ оценки без конфигурации отображения для вашей музыкальной сущности:

class Music { 
    //Other mappings 

    protected $score; 

    //TODO: add getter/setter for $score 
} 

2) Добавить это к вашему ResultSetMapper:

$rsm->addRootEntityFromClassMetadata('YourBundle:Music', 'm'); 
$rsm->addMetaResult('m', 'score', 'score', false, 'integer'); //first 'score' is your DB alias 

3) Позвоните в вашем search.html.twig:

{{ object.score }} 

Где объект является вашим музыкальным объектом.

Дополнительная информация о чистых и смешанных результатах может быть найдена here.

+0

$ rsm-> addScalarResult имеют 3 параметра: ColumnName, alias, type. Я использую только 2 параметра (потому что третий не является обязательным) и получить результат: массив: 100 [▼ 0 => массив: 2 [▼ 0 => Музыка {# 480 ▶} "оценка" => «+12,595897674560547 " ] 1 => массив: 2 [▼ 0 => Музыка {# 561} ▶ "оценка"=> "+3,7423951625823975" ] ] оценка находится вне объекта – MonkeyOne

+0

@MonkeyOne Да, верно. Я отредактировал свой ответ и протестировал его. По-видимому, это единственный способ сделать то, что вы хотите. – e1dar

+0

У меня уже есть «оценка» в объекте «Музыка», но это всегда NULL – MonkeyOne