2012-03-28 74 views
0

使用Doctrine 2和Zend Framework创建关联时,如果关联对象为空,例如对于entity-> associated_entity-> item(如果associated_entity为空),即没有与原始实体关联的实体,则出现错误试图获取非对象的属性。使用空主义2关联对象

我知道这是因为我试图从一个空的实体中获取物品。

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

我使用下面的代码来获取数据,但由于最初的关联实体将作为',那么就无法再从得到的项目'

public function __get($name) 
{ 
    if (isset($this->$name)){ 
     return $this->$name; 
    } else { 
     return ''; 
    } 
} 

回答

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 ?> 
+0

这将如何工作的原则2实体? – Quanano 2012-03-28 09:59:04

+0

你能显示一些代码吗?我认为解决 – aletzo 2012-03-28 10:01:06

+0

错误“尝试获取非对象的属性”不是与Doctrine 2相关但与OOP相关的错误 – aletzo 2012-03-28 10:02:14