0

私は現在、FOSRestBundleでSymfony2を使用してRESTfulAPIに取り組んでいます。

私はMongodbが大好きなので、それを実装しました。これが私のユーザーコントローラーのスニペットです。

  /**
   * @return View view instance
   * @View()
   */
  public function allAction() {
    $users = $this->get('doctrine_mongodb')
      ->getRepository('FantasytdUserBundle:User')
      ->findByUsername('Elvar');

    return $users;
  }

だから私はデータベースでユーザーを見つけています。それは結果をもたらします。これがmysqlデータベースで行われた場合、このスニペットは機能します。しかし、mongodbでは、getメソッドはCursorオブジェクトを返し、これが返されると、次のようなものが得られます。

[{"message":"[Semantical Error] Annotation @Secure is not allowed to be declared on class JMS\\SecurityExtraBundle\\Annotation\\Secure. You may only use this annotation on these code elements: METHOD.","class":"Doctrine\\Common\\Annotations\\AnnotationException","trace":[{"namespace":"","short_class":"","class":"","type":"","function":"","file":"\/Users\/Elvar\/Projects\/fantasytd\/backend\/vendor\/doctrine\/common\/lib\/Doctrine\/Common\/Annotations\/AnnotationException.php","line":52,"args":[]},

そしてそれは続く。

これらのカーソルオブジェクトにどのようにアプローチする必要がありますか?

4

2 に答える 2

2

結果が1つの結果しか得られない場合は明らかに機能するため、FindOneByUsername()を使用すると問題が解決します。

複数の結果が必要な場合は、ループして解決しました。

 public function allAction() {
    $usersQ = $this->get('doctrine_mongodb')
      ->getRepository('FantasytdUserBundle:User')
      ->findByUsername('Elvar');

    foreach ($usersQ as $user) {
      $users[] = $user;
    }

    return $users;
  }
于 2012-12-25T12:26:49.840 に答える
1

foreachループでリストを実行する代わりに、Cursorオブジェクトで「-> toArray()」を使用しています。これは少し簡単です。iterator_to_array()でもうまくいくはずだと思います。

于 2013-08-05T18:21:47.480 に答える