当condidtion为真时,Laravel在模型上返回空关系

时间:2018-04-13 07:45:24

标签: laravel laravel-5 laravel-5.1 relationship

我有一个模型,我想在条件发生时返回一个空值,但是当我尝试获取模型时:

Model::with('shop')->find(id);

我收到此错误:

  

“在null”

上调用成员函数addEagerConstraints()

这是我正在尝试的代码:

public function shop(){
    if(true) {
        return null;
    }
    return $this->belongsTo('App\Models\Shop');
}

当Laravel关系中的条件为真时,如何正确返回任何内容?

3 个答案:

答案 0 :(得分:5)

我认为你可以使用这个技巧 - 在满足条件时设置一个不可能的查询条件:

public function shop(){

    return $this->belongsTo('App\Models\Shop')->where(function($query) {

        if ($condition) {

            // I think this should do the trick
            $query->whereNull('id');
        }

    });

}

答案 1 :(得分:2)

将您的查询包裹在rescue帮助程序中:

// continue processing if an exception happens.
// return some default value if the query does not succeed, null for example.
return rescue(function () {
    // some custom logic here
    return $this->belongsTo('App\Models\Shop');
}, null);

<强>更新

对于5.1尝试返回新的模型实例:

public function shop(){
    if(true) {
        return new static;
    }
    return $this->belongsTo('App\Models\Shop');
}

更新2

尝试返回模型&#39; query builder

public function shop(){
    if(true) {
        return $this->newQuery(); // or newQueryWithoutScopes()
    }
    return $this->belongsTo('App\Models\Shop');
}

答案 2 :(得分:0)

返回BelongsTo实例的正确方法。

public function shop(): BelongsTo
{
    if(true) {
        return new BelongsTo($this->newQuery(), $this, '', '', '');
    }
    return $this->belongsTo('App\Models\Shop');
}