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

Nad*_*aya 3 php doctrine doctrine-collection

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

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

但我不明白这两种方法之间的区别.

Gon*_*o.- 6

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

->toArray()
Run Code Online (Sandbox Code Playgroud)

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

toArray() 相当于这个

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


$resultSet = $q->execute(); // $resultSet is an array
Run Code Online (Sandbox Code Playgroud)

根据文档

foreach ($resultSet as $post) {
    // $post is an array
    echo $post['title'];
}
Run Code Online (Sandbox Code Playgroud)

所以数组的每个元素也是一个数组关联。

反而:

->getData()
Run Code Online (Sandbox Code Playgroud)

不完全是最直观的名称,getData() 实际上获取 Doctrine Collection 对象中的所有对象并将它们放入一个数组中——而不改变对象本身。

所以你会得到对象!

foreach ($resultSet as $post) {
        // $post is not an array
        echo $post->Id;
    }
Run Code Online (Sandbox Code Playgroud)

来源:这里

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


fri*_*dde 5

只是对Doctrine 2的更新:

- >的getData()

已经成为

- >的GetValues()

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

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