2015-05-04 56 views
1

如果该字段具有null值,则预加载将无法正常工作。我如何逃避错误Laravel5 eager加载null值

Trying to get property of non-object

,并在模型我这样设置

public function bilstate() 
{ 
    return $this->hasOne('App\Attribute', 'at_id', 'cu_bilstateid'); 
} 

有人可以分享经验的关系?谢谢

回答

2

对于hasOne关系,如果存在相关记录,关系属性将被设置为相关模型的一个实例;如果相关记录不存在,则关系属性将设置为空。

渴望加载工作正常,你只需要检查相关模型是否存在,然后再尝试访问它。

if ($model->bilstate) { 
    echo 'bilstate exists: '.$model->bilstate->at_id; 
} else { 
    echo 'bilstate does not exist. Don't access attributes or you'll get an exception.'; 
} 

注意:您可以使用is_null方法检查,如果您愿意。但是,使用issetempty是不可靠的。如果关系不是急切加载的,则使用魔术方法将属性延迟加载。 is_null将触发此延迟加载,而issetempty不会。

+0

你的回答对我来说完全有意义,但是如果我们直接使用'$ model-> bilstate-> at_id'并且它不应该触发错误,除了替换为'null'。期待您的回音。 –

+0

原因是,他们使用关系数据调用的简短表示法......如果我们不能以这种意义调用关系不存在的话,我认为这是不合理的。我们需要额外的条件来过滤。 –