1

プロジェクトで初めて doctrine を使用しましたが、クエリ ビルダーにいくつか問題があります。

まず、コントローラーで次を使用しました。

$conn = $this->get('database_connection');
$users = $conn->fetchAll('SELECT * FROM Users');

これは正常に機能し、DB からユーザーの配列を返します。

次に、クエリ ビルダーを使用して、すべてのユーザーの名前を取得しようとしました。例を見ると、次のことがわかりました。

$conn = $this->get('database_connection');
$qb = $conn->createQueryBuilder();
    
$qb->select("forename")
   ->from("Users", "u")
   ->where("u.id = :user_id")
   ->setParameter('user_id', 1);
    
   $query = $qb->getQuery();
   $results = $query->getResults();

gDoctrine\DBAL\Query\QueryBuilder::getQuery() メソッドが定義されていないと言われましたが、私が見つけたほとんどすべての例がそれを使用しているため、奇妙に感じました。

検索してDoctrineのドキュメントを見つけましたが、今では使い方がまったくわかりません。

上記を使用してID 1のユーザーの名を取得する方法の例を誰かが教えてくれませんか.簡単な例があれば、そこからうまくいくと確信しています.

ありがとう!

解決済み: ドキュメントを調べた後 (および他のユーザーの助けを借りて)、queryBuilder の一般的なレイアウトは次のようになっていることがわかりました。

$conn = $this->get('database_connection');
$qb = $conn->createQueryBuilder();

$stmt = $qb->select("forename")
   ->from("Users", "u")
   ->where("u.id = :user_id")
   ->setParameter('user_id', 1)
   ->execute();
       
$userNames = $stmt->fetchAll();

一般的な考え方は、execute メソッドが Doctrine\DBAL\Driver\Statement を返し、パラメータが指定どおりに設定されているということです。このステートメントから、ここに記載されているさまざまなメソッドのいずれかを呼び出して、DB から結果を取得できます。

これが問題を抱えている他の誰かに役立つことを願っています!

4

1 に答える 1

0

doctrine に関するドキュメントと symfony での使用に少し混乱するかもしれません。エラー メッセージから、DBAL\Query\QueryBuilder を取得しています。そのオブジェクトのメソッド getQuery はありません。execute メソッドを使用して、必要な結果を取得できるはずです。

そうは言っても、私がそれを行う方法は、Usersエンティティのリポジトリクラスを使用するか、そうするかのいずれかです

$em = $this->get('doctrine.orm.entity_manager');
$qb = $em->createQueryBuilder();

じゃあ今までやっていたことを…

于 2012-02-13T14:33:34.903 に答える