使用空Doctrine 2关联对象

时间:2012-03-28 09:40:13

标签: php oop zend-framework doctrine-orm

使用Doctrine 2和Zend Framework创建关联时,如果关联的对象为空,例如对于entity-> associated_entity-> item如果associated_entity为空,即没有与原始实体关联的实体,那么我得到一个错误试图获取非对象的属性。

我知道这是因为我试图从空实体中获取该项目。

避免此错误的标准方法是什么?

我使用下面的代码来获取数据,但因为初始关联的实体将作为''返回,然后它无法从''

获取该项目
public function __get($name) 
{
    if (isset($this->$name)){
        return $this->$name;
    } else {
        return '';
    }
}  

1 个答案:

答案 0 :(得分:0)

你可以尝试:

$associatedEntity = $entity->associated_entity;

if ($associatedEntity) {
    $item = $associatedEntity->item;
}

编辑:

那好吧。尝试将其放入模板/视图中:

<?php
$department = $instruction->department;

if ($department) {
    echo $department->department;
}
?>

编辑2(在聊天中进行小讨论后:D):

我认为没有办法告诉PHP停止链。例如。 $object1->object2->attribute 如果你用这种方式编写它,无论你放在__get()中,PHP都会假设object2是一个对象,并将尝试获取所请求的属性。

最简单的解决方案就是:

<?php foreach ($this->data as $instruction) : ?>
    <?php if ($dep = $instruction->department) echo $dep->department ?>
<?php endforeach ?>