if else语句在laravel中没有响应

r8xiu3jd  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(334)

我试图阻止一个登录的用户通过在我的控制器中使用这个方法来访问一些用户在nextokin表中的信息

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.

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

lztngnrs

lztngnrs1#

findOrFail 当找不到记录时抛出404。如果你把那部分改成 get 或者 first 你可能会得到想要的结果。

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

有时,如果找不到模型,您可能希望抛出异常。这在路由或控制器中特别有用。这个 findOrFail 以及 firstOrFail 方法将检索查询的第一个结果;但是,如果没有找到结果,则 Illuminate\Database\Eloquent\ModelNotFoundException 将被抛出。
文档(向下滚动到“找不到异常”部分)

相关问题