我按照教义文档开始。这是文档。
我的代码是
$User = Doctrine_Core::getTable("User")->find(1);
当我通过 $User->Phonenumbers 访问关系时,它可以工作。当我使用 toArray() 方法将用户对象转换为数组时,它不会将关系转换为数组。它只是显示 $User 数据。
我错过了什么吗?
我按照教义文档开始。这是文档。
我的代码是
$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,则关系会以某种方式被包含在内。我的意思是,拿你自己的,例如,
$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 分配它不会。
我猜这是由于原则只首先获取一条记录,并且只有当您尝试访问外键值时,它才会获取其他相关表