クエリを繰り返すには、EagerMongoDBカーソルが必要です。コードを編集して、簡単にできるようにします:
class UserRepository extends DocumentRepository {
public function getUserTemp($clauses = null)
{
/* Create query */
$qb = $this->createQueryBuilder()->eagerCursor(true);
/* Add clauses */
if($clauses)
{
// It's a way to initialize the query, you can use a select or something similar
$query = $qb->hydrate(true);
if(isset($clauses['id']))
$query -> field('id') -> equals($clauses['id']);
if(isset($clauses['firstName']))
$query -> field('firstName') -> equals($clauses['firstName']);
if(isset($clauses['lastName']))
$query -> field('lastName') -> equals($clauses['lastName']);
if(isset($clauses['email']))
$query -> field('email') -> equals($clauses['email']);
if(isset($clauses['password']))
$query -> field('password') -> equals($clauses['password']);
}
/* Return */
return $query
-> getQuery()
-> execute();
}
}
これで、すべての結果を内部のオブジェクトとして結果を繰り返すことができます。
private function getUserAction()
{
$manager = $this -> get('doctrine_mongodb') -> getManager();
$repository = $manager -> getRepository('LogAnalyzerCoreBundle:User');
$users = $repository -> getUserTemp(array(
'firstName' => 'First'
));
//It's just an example, but here you can see how to get the query result data
foreach($users as $user){
$data[] = $user->getFirstName();
}
return $users;
}
これを行うにはこれが最善の方法です。toArray()メソッドを呼び出すだけで十分な場合もありますが、常に機能するとは限りません。