2013-06-27 47 views
0

我試圖將我的查詢移動到自定義存儲庫類中。以下是我已經走到這一步,Symfony2自定義存儲庫問題 - 注意:未定義偏移量:0

class MovieRepository extends EntityRepository 
{ 
    public function showMovie($movie) 
    { 
    $em = $this->getEntityManager(); 

    $qb = $em->createQueryBuilder('m'); 

    $query = $qb->select('m.title', 'm.img', 'u.username') 
     ->where('m.title = :movie') 
     ->leftJoin('m.user', 'u') 
     ->setParameter('movie', $movie) 
     ->getQuery(); 

    return $query->getSingleResult(); 
    } 
} 

我在我的控制器使用這樣的:

$em = $this->getDoctrine()->getManager(); 
$result = $em->getRepository('AMovieBundle:Movie')->showMovie($movie); 

我沒有把@ORM \實體(repositoryClass =「A \ MovieBundle \實體\ MovieRepository「)以及命名空間和文件夾是正確的,並且從電影到用戶的關係是正確的,因爲這在以前工作過,當我在控制器中查詢時。

主要的錯誤,我不斷收到的是:

注意:未定義抵消:0 /Applications/MAMP/htdocs/symfony2test/vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php第271行

271線查詢生成器是這樣的:

public function getRootAlias() 
{ 
    $aliases = $this->getRootAliases(); 
    return $aliases[0]; 
} 

我不知道在哪裏,從這裏去任何幫助將不勝感激。

回答

3

快速提示,函數getRootAlias()返回爲查詢創建的別名,這在您的情況下爲「m」。

,如果我做一個猜測,我會嘗試這(注意選擇語法):

$query = $qb->select('m.title, m.img, u.username') 
      ->where('m.title = :movie') 
      ->leftJoin('m.user', 'u') 
      ->setParameter('movie', $movie) 
      ->getQuery(); 

您已是EntityRepository裏面,你不需要調用$this->getEntityManager()

只要做到: $qb = $this->createQueryBuilder('m');

這應該解決您的問題。

+0

好主意,我試過了,但它沒有幫助我的問題,仍然得到相同的錯誤。但它看起來更乾淨,我不知道這是可能的,所以我會從現在開始編寫我的選擇語法。 –

+0

我編輯了我的答案,這應該可以解決您的問題。 –

+0

它有效,merci beaucoup。 –