Doctrine2 findAll()方法没有抓取关联数据?

时间:2013-02-20 05:03:02

标签: php orm doctrine mapping associations

我有一个非常简单的问题。目前我在findAll()方法之后使用了Doctrine2的getRepository方法,我设置了一个简单的OneToOne关系(Manufacturers有一个链接到address_id的字段Addresses {1}},基本的东西)。我正在尝试使用Manufacturer中的一个字段填充表格,其余字段填充来自关联Address的数据。

我在我的视图代码中执行此操作:

<?php foreach($instances as $instance) { ?>
<?php $address = $instance->address; ?>
  <tr>
    <td><?php echo $instance->name; ?></td>
    <td><?php echo $address->street; ?></td>
    <td><?php echo $address->city; ?></td>
    <td><?php echo $address->state; ?></td>
    <td><?php echo $address->zip; ?></td>
  </tr>
<?php } ?>

其中$instancesManufacturers表中的每个条目。每个属性都是公开的,但出于某种原因,Doctrine2不会将相关的Address数据与调用findAll() Manufacturers一起提取。我做错了什么?

这是我用来获取数据的原因:

$instances = $this->doctrine->em->getRepository('Entities\Manufacturer')->findAll();

我是否需要以某种方式向Doctrine指定我想要获取相关数据?

1 个答案:

答案 0 :(得分:1)

默认情况下,所有学说关联都是延迟加载。 Doctrine正在使用代理对象来延迟加载相关数据。对于每个字段,getter都在代理类中创建。您只需要调用getter而不是直接访问公共属性。 建议在您的实体中声明所有字段为私有字段,并为它们定义getter和setter。