Laravel 5.1 - 关系方法必须返回一个类型的对象

时间:2015-08-12 13:48:44

标签: php laravel laravel-5 eloquent relationship

我的应用程序需要用户付款,但不允许子帐户查看付款屏幕。

我有一个Route::group,用于检查是否允许用户通过中间件付款。 handle函数看起来像这样

    if(!\Auth::user()->isTeacher) 
{
    \Auth::logout();
     return redirect('/login')->withErrors([$error = 'Sorry there was a problem. Please notify your School']);
}        

return $next($request);

isTeacher()函数

if($this->school_id) {
$teachers = $this->school->find($this->id)->teachers;
$isTeacher = false;
foreach ($teachers as $teacher) {
    if ($teacher->id == \Auth::user()->id) {$teacher = true;}
}

return $isTeacher;

}

最后,学校关系如下所示

return $this->hasOne('App\School', 'id', 'school_id');

我一直收到的错误是

  

Model.php第2667行中的LogicException:   关系方法必须返回类型为Illuminate \ Database \ Eloquent \ Relations \ Relation

的对象

部分错误树?它显示了这来自中间件

  

在MustBeTeacherToMakePayment.php第19行的Model-> __ get('isTeacher')

这是上面第一行的if语句。

有人能告诉我我做错了什么吗?这让我很生气

1 个答案:

答案 0 :(得分:10)

您正在访问 isTeacher 属性,而不是调用 isTeacher()功能。 Eloquent会看到该名称的方法,并将其标识为应返回关系定义的方法。然后你得到错误,因为关系定义方法应该返回关系对象。

你必须替换

if(!\Auth::user()->isTeacher)

if(!\Auth::user()->isTeacher())

并且错误将消失。