Intereting Posts
Как использовать пространства имен PHP с автозагрузкой? Как увеличить счетчик в строке замены при использовании preg_replace? Запрос ОЧЕНЬ медленный (> 30 секунд) в php, но быстрый при запуске запроса в phpmyadmin JavaScript для обновления MySQL? Добавление новых значков в Visual Composer Laravel (5.3) Красноречивый – проблема отношений Есть ли способ сделать «INSERT … ON DUPLICATE KEY UDPATE» в Zend Framework 1.5? Является ли дизайн PHP, Python, PostgreSQL подходящим для бизнес-приложения? Модули CI работают на локальном уровне, но 404 не найдены на сервере Может ли SQL-инъекция быть предотвращена только с помощью addlashes (string)? Невозможно выполнить PHP-скрипт с помощью PHP exec Laravel 5.2 | запросите от многих до многих к одному Обходной путь для PHP IMAP? Попытка работать с входящей электронной почтой на localhost с помощью XAMPP Отображать данные из строки mysql в виде столбца в php Как улучшить запрос в php и MySQL для быстрого отображения

Объект курсора FOSRestBundle и Mongodb для json

В настоящее время я работаю над RESTful API, используя Symfony2 с FOSRestBundle.

Мне нравится Mongodb, поэтому я реализовал именно это, вот фрагмент моего usercontroller.

/** * @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":[]}, 

И это продолжается.

Как мне подойти к этим объектам курсора?

По-видимому, он работает, если результат дает только один результат, поэтому использование FindOneByUsername () решает проблему.

Если вам нужен множественный результат, я решил его, зациклив.

  public function allAction() { $usersQ = $this->get('doctrine_mongodb') ->getRepository('FantasytdUserBundle:User') ->findByUsername('Elvar'); foreach ($usersQ as $user) { $users[] = $user; } return $users; } 

Вместо прогона списка с циклом foreach мы используем «-> toArray ()» в объекте Cursor – это немного проще. Я считаю, что iterator_to_array () должен делать трюк.