开发者

Doctrine toarray does not convert relations

开发者 https://www.devze.com 2022-12-24 06:04 出处:网络
I followed doctrine documnet开发者_运维问答ation to get started. Here is the documentation. My code is

I followed doctrine documnet开发者_运维问答ation to get started. Here is the documentation.

My code is

$User = Doctrine_Core::getTable("User")->find(1);

when I access relations by $User->Phonenumbers, it works. When I convert User object to array by using toArray() method, it does not convert relations to array. It simply display $User data.

Am I missing something?


By using the find method you've only retrieved the User data which is why the return of toArray is limited to that data. You need to specify the additional data to load, and the best place to do this is usually in the original query. From the example you linked to, add the select portion:

$q = Doctrine_Query::create()
    ->select('u.*, e.*, p.*')  // Example only, select what you need, not *
    ->from('User u')
    ->leftJoin('u.Email e')
    ->leftJoin('u.Phonenumbers p')
    ->where('u.id = ?', 1);

Then when toArray'ing the results from that, you should see the associated email and phonenumber data as well.


I also noticed an anomaly with this where if you call the relationship first then call the ToArray, the relationship somehow gets included. what i mean is that, taking your own eg,

$User = Doctrine_Core::getTable("User")->find(1); 
$num= $User->Phonenumbers->office; // assumed a field 'office' in your phone num table
$userArray = $user->toArray(true);

In the above case, $userArray somehow contains the whole relationship. if we remove the $num assignment it doesn't.

am guessing this is due to doctrine only fetching the one record first, and it's only when you try to access foreign key values that it fetches the other related tables

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号