Laravel 从雄辩的关系返回null?

Laravel 从雄辩的关系返回null?,laravel,laravel-5,eloquent,laravel-5.3,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 我试过这个: publ

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

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\Component\Debug\Exception\FatalErrorException” 中的“在null上调用成员函数AddagerConstraints() /var/www/social/vendor/laravel/framework/src/illumb/Database/Eloquent/Builder.php:680


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

我不确定!但我认为使用count是可能的!当它返回0时,您知道没有记录,因此可以返回null。

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

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
中获取用户的like,其中用户id等于经过身份验证的用户id

希望有帮助