2010-03-25 57 views
0

我遵循doctrineation documnetation开始。这里是documentation主义toarray不转换关系

我的代码是

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

,当我通过$用户 - > PHONENUMBERS访问的关系,它的工作原理。当我通过使用toArray()方法将User对象转换为数组时,它不会将关系转换为数组。它只是显示$用户数据。

我错过了什么吗?

回答

1

通过使用find方法,您只能检索User数据,这就是为什么toArray的返回限制为该数据的原因。您需要指定要加载的附加数据,并且通常在原始查询中执行此操作的最佳位置。从你挂例如,添加选择部分:

$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); 

然后toArray'ing从结果时,你应该看到相关的电子邮件和PhoneNumber数据也是如此。

0

我也注意到这种情况下的异常情况,如果您先调用关系,然后调用ToArray,则会以某种方式包含关系。我的意思是,拿你自己的例如,

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

在上面的情况下,$ userArray莫名其妙包含整个关系。如果我们删除$ num赋值,它不会。

我猜这是由于原则只是首先获取一条记录,并且只有当您尝试访问获取其他相关表的外键值时