2012-05-10 7 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

これは、クエリが機能していないこととは関係ありません。

"Parse error"と表示された場合、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エラーを取得します。空白を取り除くと間違いを見るのが簡単です。 where行の後に行方不明

// 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

セミコロン。