2012-05-10 87 views
-1

我正在開發一個應用程序,使用Symfony2和DQL在存儲庫中構建一些查詢。我有在控制器中的下一個代碼:Symfony2存儲庫查詢不起作用

$emGalPak = $this->getDoctrine()->getEntityManager(); 
    $OsatugabeKop = $emGalPak->getRepository('AnotatzaileaAnotatzaileaBundle:GalderaPaketea') 
          ->getOsatugabeKop(); 

,這是我建立的資料庫對應於上述實體查詢:

<?php 

namespace Anotatzailea\AnotatzaileaBundle\Repository; 

use Doctrine\ORM\EntityRepository; 

/** 
* GalderaPaketeaRepository 
* 
* This class was generated by the Doctrine ORM. Add your own custom 
* repository methods below. 
*/ 
class GalderaPaketeaRepository extends EntityRepository 
{ 
    public function getOsatugabeKop() 
    { 
     $qb = $this->createQueryBuilder('c') 
        ->select('c') 
        ->where('c.Osatua = 0') 
     $Emaitza = $qb->getQuery()->getResult(); 

       return sizeof($Emaitza); 

    } 

} 

當運行它顯示了一個錯誤的代碼:

Parse error: syntax error, unexpected T_VARIABLE in /var/www/Symfony/src/Anotatzailea/AnotatzaileaBundle/Repository/GalderaPaketeaRepository.php on line 20 

有關如何解決此錯誤的任何想法?

+0

上面提到的Osatua屬性是布爾值 – Haritz

回答

2

這與您的查詢無效無關。

當你看到「解析錯誤」,這意味着你的PHP代碼本身格式不正確,PHP引擎甚至無法解析它,更不用說運行它了。

在這種特殊情況下,您在創建查詢構建器的表達式末尾丟失了分號。

public function getOsatugabeKop() 
{ 
    $qb = $this->createQueryBuilder('c') 
       ->select('c') 
       ->where('c.Osatua = 0'); // <--- right there 
    $Emaitza = $qb->getQuery()->getResult(); 

    return sizeof($Emaitza); 
} 

當你得到unexpected T_VARIABLE錯誤幾乎總是因爲你省略了分號和解析器遇到一個變量之前它認爲它應該。如果刪除空格,則更容易看到錯誤。

// Bad Code, two lines 
$now = time() 
$one = 1; 

// Bad Code, one line 
$now = time()$one = 1; 
// ----------^ Pretty obvious now that a semicolon is missing 
// And that a variable was encountered unexpectedly 

乾杯

+0

把我擊敗了26秒:) –

+0

我總是很驚訝人們怎麼看不到這個。 PHP的錯誤信息是如此簡潔明瞭,問題是什麼。 – Flukey

0

分號後面where線失蹤。