关系方法必须返回一个类型为


Laravel 5.1 - Relationship method must return an object of type

我的应用程序从用户支付,但子帐户必须不允许看到支付屏幕。

我有一个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

的对象。

在错误树的一部分??它显示了来自中间件

的内容

at Model->__get('isTeacher') in MustBeTeacherToMakePayment.php line 19

,即上面第一行的if语句。

有谁能告诉我我做错了什么吗?

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

你必须替换

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

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