为什么我在 laravel 中没有得到模型的查询结果?

rav*_*avi 6 laravel laravel-5 laravel-5.1 laravel-5.2

当我按数据库表中可用的城市名称搜索时,它会显示结果,但是当我按数据库表中不可用的未知城市搜索时,它会显示 -模型 [App\City] 没有查询结果。我正在与您分享代码和屏幕截图查看错误屏幕截图 实际上我想重定向到 401 页面,如果在我的数据库表中找不到该城市

这是我的路线

Route::get('teacher-jobs-by-city/{city}','TeacherJobsController@by_location');

这是我的功能

公共函数 by_location($location_id='') {

$data= array();
$location = City::where('slug',$location_id)->where('status','1')->firstOrFail();
$items= Subject::orderBy('id','asc')->get();
$data['location']=$location;

      //$subjects = [''=>'Select Subject'] + Subject::lists('subject_title','id')->toArray();
      //$city = [''=>'Select City'] + City::lists('name','id')->toArray();
        $active_class ='Select Subject to see job Openings';
        return view('frontend.teacherjobs.by_location',compact('active_class','data','items'));

    }
Run Code Online (Sandbox Code Playgroud)

Eli*_*res 7

那是因为您正在使用该firstOrFail()方法,如果没有结果,则会通过抛出将被重新标记为“模型没有查询结果...”消息的异常而失败。

如果你不想失败,你可以:

  1. 用 try-catch 块包围您的查询,处理异常并返回一些消息
  2. firstOrFail()方法替换为first()


Yve*_*ndo 5

您可以通过修改Illuminate\Database\Eloquent\ModelNotFoundException处理异常的方式来处理这种错误。在App\Exceptions\Handler类中将渲染方法更改为如下所示

public function render($request, Exception $exception)
{
    if($exception instanceof ModelNotFoundException){
        return redirect("/error_page", 401)->with('error', $e->getMessage());
    }
    return parent::render($request, $exception);
}
Run Code Online (Sandbox Code Playgroud)

在重定向中,您必须放置要重定向到的路由,我/error_page仅用于示例目的。您可以了解有关错误处理的更多信息'

不要忘记像这样导入 ModelNotFoundException use Illuminate\Database\Eloquent\ModelNotFoundException;