【问题标题】:Laravel5 eager loading null valueLaravel5 急切加载空值
【发布时间】:2015-07-13 08:34:00
【问题描述】:

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

Trying to get property of non-object

在模型中我这样设置关系

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

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

【问题讨论】:

    标签: php laravel laravel-5 eloquent eager-loading


    【解决方案1】:

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

    预加载工作正常,您只需要在尝试访问其上的任何内容之前检查相关模型是否存在。

    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 不会。

    【讨论】:

    • 你的回答对我来说也完全有意义,但是如果我们直接使用$model->bilstate->at_id 并且它不应该触发错误,除非替换为'null'。期待您的来信。
    • 原因是,他们使用简短的符号来调用关系数据......如果我们不能在这种意义上调用,如果关系不存在,我认为这是没有意义的。我们需要额外的条件来过滤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2021-04-28
    • 2013-04-13
    相关资源
    最近更新 更多