Symfony2, доктрина 2: объект GetResult

#doctrine-orm #symfony

#доктрина-orm #symfony

Вопрос:

 $posts = $em->find('ApplicationBlogBundleEntityPost',1);
print_r ($posts);
  

Почему я это получил?

 BariiBlogBundleEntityPost Object ( [id:BariiBlogBundleEntityPost:private] => 1 [title:ApplicationBlogBundleEntityPost:private] => something [body:ApplicationBlogBundleEntityPost:private] => content  )
  

вместо простого массива, подобного этому:

 array ( [id] => 1,
        [title] => "something",            
        [body] => "content"  )
  

Я использую его с Symfony 2.

Ответ №1:

Здесь у вас есть пара вариантов. Насколько я знаю, вы не можете найти результаты в виде массивов из репозиториев объектов по умолчанию. Вместо этого вы можете сделать одну из двух вещей:

Во-первых, вы могли бы реализовать toArray() метод для вашего объекта entity (возможно, через отображенный суперкласс), который просто возвращает массив свойств.

Во-вторых, вы могли бы использовать Doctrine Query Language для извлечения необходимой вам информации с помощью getArrayResult() метода, возможно, что-то вроде этого:

 $query = $em->createQuery('SELECT p FROM ApplicationBlogBundleEntityPost p WHERE p.id=:pid');
$query->setParameter('tid', $postId);
$result = $query->getArrayResult(); // shortcut for $query->getResult(Query::HYDRATE_ARRAY);
  

Более подробную документацию по DQL можно найти здесь.

Комментарии:

1. Разочаровывает, что Sf2 / Doctrine не предусматривает этот чрезвычайно распространенный вариант использования.