2015-03-09 11 views
5

Ads L'entità è descritta in base alle informazioni geografiche: Paese> Regione> Contea. L'entità Ads è collegata solo con County. Di conseguenza, il recupero di Ads da parte dei paesi richiederà che ci uniamo alle entità due volte.Impossibile selezionare l'entità tramite variabili di identificazione senza selezionare almeno un alias di entità radice

Il mio obiettivo è il conteggio del numero di annunci per un determinato paese. Per questo, ho provato questa query DQL ma senza successo:

public function getMotorsAdsCountByCountry($slug){ 
    $qb = $this->_em->createQueryBuilder() 
      ->select("m.id, COUNT(m.id) AS cnt") 
      ->from("MinnAdsBundle:MotorsAds", "m") 
      ->join("m.county","county")->addSelect("county") 
      ->join("county.region","region")->addSelect("region") 
      ->join("region.country","country")->addSelect("country") 
      ->where("country.slug=:slug") 
      ->setParameter(":slug", $slug); 
    return $qb->getQuery()->getSingleScalarResult(); 
} 

L'errore ho ottenuto è:

[Semantical Error] line 0, col -1 near 'SELECT m.id,': Error: Cannot select entity through identification variables without choosing at least one root entity alias.

Ho anche visto un post per quanto riguarda lo stesso errore in this link ma senza successo.

risposta

4

ho trovato la soluzione:

$qb = $this->_em->createQueryBuilder() 
      ->select("COUNT(m.id) AS cnt") 
      ->from("MinnAdsBundle:MotorsAds", "m") 
      ->join("m.county","county") 
      ->join("county.region","region") 
      ->join("region.country","country") 
      ->where("country.slug=:slug") 
      ->setParameter(":slug", $slug); 

ho sufficiente rimuovere l'addSelect() oltre al m odificazione della selezione().

2

provare a cambiare

->select("m.id, COUNT(m.id) AS cnt") 

a

->select("m, COUNT(m.id) AS cnt") 

o modificare idratazione matrice

+0

Ho provato entrambi '-> select (" m, COUNT (m.id) AS cnt ")' e '-> select (array (" m "," COUNT (m.id) AS cnt "))' ma senza successo! l'errore che ottengo è: ** Errore interno server 500 - NonUniqueResultException ** –

Problemi correlati