查询子模型中的数据

时间:2011-09-26 07:05:37

标签: zend-framework doctrine doctrine-orm

到目前为止,我已经在我正在处理的一个简单应用程序中设置了3个模型:

到目前为止,我有这些模型:

  • UserAccountEntity - 顶级表(与UserAccountEntityStrings有一对多的关系)
  • UserAccountEntityStrings - 子表(与UserAccountEntity和EavAttributes具有多个关系
  • EavAttributes - 查找表

当我从顶级表查询数据时,我得到了子表的模式,关联信息。但我没有从子表中获取任何持久数据。

我对结果的期望是来自顶级模型的数据和来自相关子模型的数据。非常感谢任何帮助。

可能有用的注释,我使用的是Zend 1.11.10和Doctrine 2

这就是我的查询:

   $users = $em->createQuery('select u from Fiobox\Entity\UserModule\UserAccountEntity u')->execute();
   Zend_Debug::dump($users[0]);

这是我的顶级模型中的关联:

/**
 *
 * @param \Doctrine\Common\Collections\Collection $property
 * @OneToMany(targetEntity="UserAccountEntityStrings",mappedBy="UserAccountEntity", cascade={"persist","remove"})
 */
private $strings;

这些是我孩子模型中的关联:

/**
 *
 * @var UserAccountEntity
 * @ManyToOne(targetEntity="UserAccountEntity")
 * @JoinColumns({
 *  @JoinColumn(name="entity_id", referencedColumnName="entity_id")
 * })
 */
private $user;

/**
 * @var EavAttribute
 * @ManyToOne(targetEntity="Fiobox\Entity\EavModule\EavAttributes")
 * @JoinColumn(name="attribute_id", referencedColumnName="attribute_id")
 */
private $attributes;

1 个答案:

答案 0 :(得分:1)

你真的尝试了什么吗?

Doctrine将延迟加载给你的东西。 var_dump可能显示子对象的持久代理对象集合。但是如果你访问它们,它们将自动加载:

<?php
$users = $em->createQuery('select u from Fiobox\Entity\UserModule\UserAccountEntity u')->fetchAll();

foreach($users as $u){
    foreach($u->strings as $s){
        var_dump($s);
    }
}

如果您知道自己需要所有子数据,那么您也可以在DQL中强制获取fetch:

<?php
$users = $em->createQuery('select u, s from Fiobox\Entity\UserModule\UserAccountEntity u JOIN u.strings s')->fetchAll();