Search code examples
phpsymfonydoctrine-ormnativequerydoctrine-native-query

How to get non-mapped column in a result of Doctrine native query


How can I get non-mapped column in result from native query?

My query:

$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);

Column score isn't mapped in entity and I don't have access to its value from Twig. Is it possible to add this column into entity only for this query?


Solution

  • If you want to show score inside Twig template, you can try following steps:

    1) Add $score attribute without any mapping configuration to your Music entity:

    class Music {
        //Other mappings
    
        protected $score;
    
        //TODO: add getter/setter for $score
    } 
    

    2) Add it to your ResultSetMapper:

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

    3) Call in your search.html.twig:

    {{ object.score }} 
    

    Where object is your Music entity.

    Additional information about pure and mixed results could be found here.