DoctrineCollection:toArray()和getData()之间的区别

时间:2013-09-13 13:35:24

标签: php doctrine doctrine-collection

基本上,如果我有DoctrineCollection的DoctrineRecord对象,并希望将其转换为数组,我可以使用:

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

但我不明白这两种方法之间有什么区别。

2 个答案:

答案 0 :(得分:5)

只是对Doctrine 2的更新:

  

- >的getData()

已成为

  

- >的GetValues()

Gonzalo适用于Doctrine 1,但希望这有助于任何发现此线程的人寻找答案,但使用getData()时会遇到问题。

(对不起Gonzalo,我还没有评论的评分。)

答案 1 :(得分: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

请记住,这仅适用于Doctrine 1,对于Doctrine 2,请参阅下面的答案(或评论)