Doctrine 托雷主义不能改变关系

Doctrine 托雷主义不能改变关系,doctrine,database-relations,toarray,Doctrine,Database Relations,Toarray,我按照条令文件开始。这是你的电话号码 我的代码是 $User = Doctrine_Core::getTable("User")->find(1); 当我通过$User->Phonenumbers访问关系时,它就起作用了。当我使用toArray()方法将用户对象转换为数组时,它不会将关系转换为数组。它只显示$User数据 我遗漏了什么吗?通过使用find方法,您只检索了用户数据,这就是toArray的返回仅限于该数据的原因。您需要指定要加载的其他数据,而执行此操作的最佳位置通常是在原始查

我按照条令文件开始。这是你的电话号码

我的代码是

$User = Doctrine_Core::getTable("User")->find(1);
当我通过$User->Phonenumbers访问关系时,它就起作用了。当我使用toArray()方法将用户对象转换为数组时,它不会将关系转换为数组。它只显示$User数据


我遗漏了什么吗?

通过使用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);

然后,在整理结果时,您应该也会看到相关的电子邮件和电话号码数据。

我还注意到一个异常情况,即如果您先调用关系,然后调用toArray,则关系会以某种方式被包括在内。我的意思是,拿你自己的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);
在上面的例子中,$userArray以某种方式包含了整个关系。如果我们删除$num分配,它不会

我猜这是因为条令只首先获取一条记录,而只有当您尝试访问外键值时,它才会获取其他相关表