$shops = $this->em->getRepository('models\Shop')->findAll();
Дает мне массив с сущностями, но мне нужен массив как массив.
Как преобразовать объект в массив?
$shops = $this->em->getRepository('models\Shop')->findAll();
Дает мне массив с сущностями, но мне нужен массив как массив.
Как преобразовать объект в массив?
У меня была та же проблема. return get_object_vars($this)
не является хорошим решением, потому что он также преобразует внутренний объект/свойства доктрины. После некоторых исследований я нашел этот класс: EntitySerializer, который создает чистый массив или JSON из ваших объектов и удаляет ненужные элементы. Документация находится здесь. Например, я использовал следующий код:
$patientProfile = $this->em->getRepository('Entities\Patientprofile')->findOneByuserid('2222222');
$entitySerializer=new Bgy\Doctrine\EntitySerializer($this->em);
$patientProfile=$entitySerializer->toArray($patientProfile);
Doctrine позволяет вам указать режим гидратации при выполнении запросов, которые позволяют вам изменить тип данных возвращаемых результатов. В этом случае вам нужен Query:: HYDRATE_ARRAY. Это не позволяет указать это по методу findAll() по умолчанию, найденному в репозиториях. Вам нужно будет написать свой собственный DQL для него.
Если вам нужна коллекция entites как массивы:
$query = $em->createQuery('SELECT u FROM User u');
$entites = $query->execute(array(), Query::HYDRATE_ARRAY);
// If you don't have parameters in the query, you can use the getResult() shortcut
$query = $em->createQuery('SELECT u FROM User u');
$entities = $query->getResult(Query::HYDRATE_ARRAY);
Если вам нужна отдельная сущность в виде массива, например. для определенного идентификатора:
$query = $em->createQuery('SELECT u FROM User u WHERE u.id = ?1');
$query->setParameter(1, $id);
$entity = $query->getSingleResult(Query::HYDRATE_ARRAY);
Эти методы определены на Query и AbstractQuery.