Sam*_*Sam 4 php relationship laravel eloquent laravel-5
我的应用程序需要用户付款,但不允许子帐户查看付款屏幕.
我有一个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);
Run Code Online (Sandbox Code Playgroud)
和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;
Run Code Online (Sandbox Code Playgroud)
}
最后,学校关系如下所示
return $this->hasOne('App\School', 'id', 'school_id');
Run Code Online (Sandbox Code Playgroud)
我一直收到的错误是
Model.php第2667行中的LogicException:关系方法必须返回一个类型为Illuminate\Database\Eloquent\Relations\Relation的对象
在错误树的一部分?它显示了这来自中间件
at Model - > __ get('isTeacher')在MustBeTeacherToMakePayment.php第19行
这是上面第一行的if语句.
有人能告诉我我做错了什么吗?这让我很生气
jed*_*ylo 10
您正在访问isTeacher属性,而不是调用isTeacher()函数.Eloquent会看到该名称的方法,并将其标识为应返回关系定义的方法.然后你得到错误,因为关系定义方法应该返回Relation对象.
你必须更换
if(!\Auth::user()->isTeacher)
Run Code Online (Sandbox Code Playgroud)
同
if(!\Auth::user()->isTeacher())
Run Code Online (Sandbox Code Playgroud)
而错误将消失.
| 归档时间: |
|
| 查看次数: |
9118 次 |
| 最近记录: |