从雄辩的关系中返回null?

时间:2017-03-08 21:17:04

标签: laravel laravel-5 eloquent laravel-5.3

我在我的一个模型类中有这种关系:

public function userLike()
{
    if (Auth::check()) return $this->hasOne('App\Like')->where('user_id', Auth::user()->id);

    // RETURN NULL IF RECORD DOESN'T EXIST?
}

如您所见,它会检查用户是否已登录并返回Like条记录。但是,如果记录不存在,如何返回null?

我试过了:

public function userLike()
{
    if (Auth::check()) return $this->hasOne('App\Like')->where('user_id', Auth::user()->id);

    return null;
}

但我收到错误:

  

local.ERROR:异常   ' Symfony的\元器件\调试\异常\ FatalErrorException'与消息   '在null'上调用成员函数addEagerConstraints()在   /var/www/social/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:680

作为一个附带问题,我这样做了吗?这是正确的做法还是有更好的方法?

2 个答案:

答案 0 :(得分:1)

我不确定!但我认为有可能使用计数!当它返回0时你知道没有记录,所以你可以返回null。

答案 1 :(得分:0)

我不确定这是否正确。在你的模型中,你应该只声明你的关系:

public function userLike()
{
    return $this->hasOne('App\Like');
}

然后在一个控制器或其他东西中你会得到像你这样的用户:

class LikesController extends Controller {

    public function getLike()
    {
        $like = null;
        if (Auth::check()) {
            $like = Like::where('user_id', Auth::user()->id)->first();
        }
    }
}

因此,我们有一个getLike()函数可以从您的模型Like获取用户的类似信息,其中user_id等于经过身份验证的用户的ID。

希望它有所帮助!