2013-08-12 2 views
1

У меня проблема с методами Doctrine2 find. Все они возвращаются как массив вместо ArrayCollection.doctrine2 find методы возвращает массив вместо ArrayCollection

Есть ли кто-нибудь, чтобы заставить их вернуть ArrayCollection? Я помню, это также произошло с запросом пользовательского репозитория. Мне пришлось сделать: новый ArrayCollection ($ result).

+0

ArrayCollection предназначен для поддержки OneToMany или ManyToMany коллекции отношений, но методы find * просто возвращают некоторые результаты, здесь нет необходимости в коллекции. – AlterPHP

+0

ОК. Но было бы неплохо сделать $ results-> count() вместо count ($ results) или иметь какой-либо из методов ArrayCollection вместо плоского массива. – brpaz

+1

PHP не является Java, поэтому массивы по-прежнему являются «бедными родными» типами. ArrayCollection - это объектно-ориентированные массивы, но не добавляют некоторые новые функции. Он просто предоставляет интерфейс объекта для отображения коллекций в сущности, а не для разрушения структуры объекта при обработке отношений. – AlterPHP

ответ

0

Вот мой грязный, низкотехнологичный подход.

// your findBy* here: 
$entities = $em->getRepository($entclass)->findBy($entFilter, array('id' => 'DESC')); 

// my one-liner conversion here: 
$entitiesCollection= new \Doctrine\Common\Collections\ArrayCollection($entities); 

Тогда я подтвердил, я мог бы использовать эти удобные методы ArrayCollection как последний(), COUNT(), содержит() и т.д.

var_dump($entitiesCollection->count(), $entitiesCollection); print \strftime('%c') . __FILE__ . __LINE__ . __FUNCTION__; die; 
+0

Он работает, но он слишком медленный. Вы обнаружили что-нибудь еще? –

Смежные вопросы