6

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

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

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

4

2 回答 2

9

只是教义 2 的更新:

->获取数据()

已经成为

->getValues()

Gonzalo 对 Doctrine 1 是正确的,但希望这可以帮助那些也发现这个线程正在寻找答案但使用 getData() 遇到问题的人。

(抱歉,Gonzalo,我还没有声誉评分来发表评论。)

于 2016-12-26T22:09:57.480 回答
6

更新:请参阅下面对教义 2 的回复。此回复仅涵盖教义 1

->toArray()

大多数程序员可能会假设对集合调用 toArray() 只是将所有对象放入一个数组中。虽然 toArray() 确实这样做了,但它还将对象本身转换为关联数组,这可能不是您想要的。

toArray()相当于这个

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


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

根据文档

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;
    }

来源:这里

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

于 2013-09-13T15:32:22.153 回答