2013-09-13 2 views
2

В принципе, если бы я имел DoctrineCollection объектов DoctrineRecord, и хотел, чтобы преобразовать его в массив, я мог бы использовать:DoctrineCollection: разница между ToArray() и GetData()

$collection->toArray() или $collection->getData()

Но Я не понимаю, в чем разница между этими двумя методами.

ответ

3
->toArray() 

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

toArray() эквивалентна этой

$q = Doctrine_Query::create() 
    ->from('Post p') 
    ->setHydrationMode(Doctrine::HYDRATE_ARRAY); 


$resultSet = $q->execute(); // $resultSet is an array 

according to the documentation

foreach ($resultSet as $post) { 
    // $post is an array 
    echo $post['title']; 
} 

, так что каждый элемент массива также является ассоциативным массивом.

Вместо:

->getData() 

Не совсем наиболее интуитивное имя, GetData() фактически принимает все объектов в объекте Doctrine Collection и помещает их в массив - без изменения самих объектов.

поэтому вы получите предметы!

foreach ($resultSet as $post) { 
     // $post is not an array 
     echo $post->Id; 
    } 

Источник: here

Имейте в виду, это работает только для доктрины 1, для Doctrine 2 см ответ ниже (или комментарии)

+1

отличный ответ! благодаря! Я буду придерживаться getData(), затем – NadiaFaya

+0

Обратите внимание, что класс 'Collection' Doctrine 2 - это просто оболочка вокруг массива; 'toArray' возвращает этот массив без каких-либо манипуляций. –

3

Просто обновление для Доктрины 2:

-> getData()

стал

-> GetValues ​​()

Гонсало был прав для доктрины 1, но надеюсь, что это помогает кто-то, кто также нашел эту тему в поисках ответа, но возникли проблемы с использованием GetData().

(Извините, Gonzalo, у меня еще нет оценки репутации).