Laravel5 预加载空值

Laravel5 eager loading null value

如果该字段具有 null 值,则预加载将不起作用。我如何逃避错误

Trying to get property of non-object

在模型中我设置了这样的关系

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

有人可以分享经验吗?谢谢

对于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 是不可靠的。如果关系不是预先加载的,那么将使用 __get() 魔术方法延迟加载属性。 is_null 将触发此延迟加载,而 issetempty 不会。