3

私はおそらく何かを見落としていますが、Doctrine2 DQL から結果が得られない理由を理解できません。失敗しませんが、空のオブジェクトを返します。Symfony2 パラメーターは正しく設定されており、データベースが適切な SQL でクエリされていることがわかります (MySQL で SQL クエリをログに記録することにより)。

コードが機能しないコントローラー:

public function debugAction() {
    $em = $this->getDoctrine()->getEntityManager();
    $qb = $em->createQueryBuilder();
    $account = $qb->select('a')
                   ->from('SkiviBundle:Account', 'a')
                   ->where('a.id = :id')
                   ->setParameter('id', 5)
                   ->getQuery()->getResult();
    return new \Symfony\Component\HttpFoundation\JsonResponse(array(
        'dql' => $qb->getDql(),
        'sql' => $qb->getQuery()->getSQL(),
        'params' => $qb->getQuery()->getParameters(),
        'account' => $account
    ));
}

返されたオブジェクトが空であることを示す JSON 応答を次に示します。パラメータを取得することすらできません。

{
   "dql":"SELECT a FROM SkiviBundle:Account a WHERE a.id = :id",
   "sql":"SELECT a0_.id AS id0, a0_.business AS business1 FROM account a0_ WHERE a0_.id = ?",
   "params":{},
   "account":[{}]
}

データベースに対して SQL が正常に実行されることはわかっています。Doctrine2 に戻りオブジェクト ($accounts) をエンティティ オブジェクトとして設定させるにはどうすればよいですか? 私の Symfony2 アプリケーションは標準です (エンティティとコントローラーを追加し、データベース アクセス用のパラメーターを更新する以外は、追加の構成なしで生成されます。

4

1 に答える 1

1

dql で :id を使用できないようです。id がキーワードですか? 名前を変更して、もう一度やり直してください

結局のところ、このクエリを実行する方法は次のとおりです。

$em->getRepository('SkiviBundle:Account')->find($id);
于 2013-11-11T03:09:20.373 に答える