控制器中的if else语句在Laravel中没有响应

时间:2018-06-27 11:22:55

标签: php mysql laravel if-statement controller

试图通过我的控制器中的此方法来阻止登录用户访问某些段落,除非该用户将其信息保存在NextofKin表中

public function checkValidTenant($tenant_id){
    $check = NextOfKin::where('tenant_id', '=', $tenant_id)->findOrFail('tenant_id');
    return $check;
}

在显示此类页面的方法中,我添加以下代码进行限制

if($this->checkValidTenant(\Auth::user()->id)){
    $rents = RentDue::where('tenant_id', '=', \Auth::user()->id)->get();
    return view('/tenant/rent', compact('rents'));
}else{
    return redirect()->route('tenant/profile');
} 

我也这样尝试过

if($this->checkValidTenant(\Auth::user()->id) === true){
    $rents = RentDue::where('tenant_id', '=', \Auth::user()->id)->get();
    return view('/tenant/rent', compact('rents'));
}else{
    return redirect()->route('tenant/profile');
}

这是路线

Route::get('rent', 'TenantController@rent');

问题是,当我尝试使用满足条件的登录用户访问页面时,它将引发以下错误

Sorry, the page you are looking for could not be found. 

但是我注意到只有删除此限制后,才会显示此页面。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

findOrFail在找不到记录时将抛出404。如果将该部分更改为getfirst,则可能会得到所需的结果。

public function checkValidTenant($tenant_id){
    $check = NextOfKin::where('tenant_id', '=', $tenant_id)->first();
    return $check;
}
  

有时候,如果找不到模型,您可能希望抛出异常。这在路由或控制器中特别有用。 findOrFailfirstOrFail方法将检索查询的第一个结果;但是,如果未找到结果,将抛出Illuminate\Database\Eloquent\ModelNotFoundException

Documentation(向下滚动到“未发现异常”部分)