【问题标题】:Doctrine toarray does not convert relations教义 toarray 不转换关系
【发布时间】:2011-01-31 13:01:37
【问题描述】:

我遵循教义文档开始。这是documentation。

我的代码是

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

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

我错过了什么吗?

【问题讨论】:

    标签: doctrine database-relations toarray


    【解决方案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);
    

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

    【讨论】:

      【解决方案2】:

      我还注意到一个异常情况,如果您先调用关系然后调用 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-08
        • 1970-01-01
        • 1970-01-01
        • 2015-09-22
        • 2018-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多