0

我按照教义文档开始。这是文档

我的代码是

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

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

我错过了什么吗?

4

2 回答 2

1

通过使用 find 方法,您只检索了用户数据,这就是 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);

然后,当对结果进行排列时,您还应该看到相关的电子邮件和电话号码数据。

于 2010-03-25T01:51:34.953 回答
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 分配它不会。

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

于 2011-04-20T07:17:54.537 回答