【发布时间】:2015-11-05 04:14:53
【问题描述】:
我的应用程序从用户那里收取付款,但不得允许子帐户看到付款屏幕。
我有一个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;
}
最后 School 关系如下所示
return $this->hasOne('App\School', 'id', 'school_id');
我一直收到的错误是
Model.php 第 2667 行中的 LogicException: 关系方法必须返回 Illuminate\Database\Eloquent\Relations\Relation 类型的对象
在错误树的一部分??它显示了这个来自中间件
在 MustBeTeacherToMakePayment.php 第 19 行中的 Model->__get('isTeacher')
这是上面第一行的 if 语句。
有人能告诉我我做错了什么吗?这让我发疯了
【问题讨论】:
-
你的
school关系是什么样的? -
我相信 jedrzej.kurylo 是正确的,但我也相信你应该仔细看看你的
isTeacher()函数。您正在设置您不使用的变量,并且您可能希望在$teacher变为 true 时跳出该循环。否则,它将继续运行并可能返回 false。
标签: php laravel laravel-5 eloquent relationship