3

Doctrine 2.2.2 にアップグレードしました。データベースをアプリケーションに正常に接続し、プロキシとリポジトリを生成することができました。私はその世代に問題はありません。ドクトリン2.2.2のDQLの使用に関して混乱しています。ケースはこれです:私は現在、ユーザー登録、認証などを担当するリポジトリクラスを持っています。それでDQLを実行することはできましたが、(リポジトリクラスで)このことについて奇妙に感じました。

$query = $em->createQuery("SELECT u FROM MyProject\\Entity\\AdminUsers u");

私も試しました:

$query = $em->createQuery("SELECT u FROM AdminUsers u");

最後はうまくいきませんでしたが、最初のものはうまくいきましたが、奇妙に思えます。ドクトリン2でDQLを実行するのは本当に正しい方法ですか? または私は何か重要なものを見逃していますか?

注:このリポジトリクラスの上記の宣言は次のとおりです。

namespace MyProject\Repository;

use Doctrine\ORM\EntityRepository,
    MyProject\Entity\AdminUsers;
4

1 に答える 1

3

それはほとんど正しい方法です。一重引用符を使用する場合は、二重のバックスラッシュの代わりに'単一のバックスラッシュを使用できます。\\\

Doctrine は、useステートメントを介してどのクラスをインポートしたかを見つけることができません (そうするのは非常にコストがかかります)。

ただし、次の方法でエンティティマネージャーから取得する型付きリポジトリを使用できます。

$repo  = $em->getRepository('MyDomain\Model\User');
$res = $repo->findSomeone();

そして、findSomeone()関数でこれを行うことができます:

$qb = $this->createQueryBuilder('u');
$dql = $qb->where('u.id = 1')->getDQL();

return $this->_em->createQuery($dql)->getSingleResult();

つまり、リポジトリは既にエンティティに入力されており、選択するクラスを認識しています。

いくつかのドキュメント:

于 2012-09-07T14:35:59.130 に答える