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

时间:2018-09-24 02:17:05

标签: laravel laravel-5 laravel-5.2 laravel-5.1

当我按我的数据库表中可用的城市名称搜索时,它将显示结果,但当我按我的数据库表中不可用的未知城市搜索时,它显示-模型[App \城市]。我正在与您分享代码和屏幕截图see error screenshot 实际上,如果我的数据库表中找不到城市,我想重定向到401页

这是我的路线

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

这是我的职能

公共函数by_l​​ocation($ 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'));

    }

4 个答案:

答案 0 :(得分:1)

这是因为您使用的firstOrFail()方法(如果命名方法失败)将抛出Exception(异常)消息,如果没有结果,该方法将失败,该消息将重新显示为“ No query results for model ...”消息。

如果您希望它不会失败,则可以:

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

答案 1 :(得分:1)

您可以通过修改EIGEN=/usr/include/eigen3 cd ./bin for file in ../src/*cpp; do g++ -std=c++11 -fPIC -c -I$EIGEN -I../include -O3 $file "-lstdc++fs" done ar crv libfoo.a *.o cd .. 处理异常的方式来处理此类错误。在Illuminate\Database\Eloquent\ModelNotFoundException类中,将render方法更改为如下

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); } 只是出于示例目的。 您可以在Error Handling'

上了解更多信息

别忘了像这样/error_page

导入ModelNotFoundException。

答案 2 :(得分:0)

替换此:

$location = City::where('slug',$location_id)->where('status','1')->first();

与此:

pip install -U pyperclip

答案 3 :(得分:0)

加上Elias Soares的答案,这是因为laravel如果firstOrFail不返回结果,则会生成“ Illuminate \ Database \ Eloquent \ ModelNotFoundException”异常。

参考:documentation

由您决定如何处理此异常。如果使用firstOrFail->至first()解决方案

将firstOrFail替换为first之后,您将得到错误:“试图获取非对象的属性”,这是因为您的查询未获取任何内容,因此没有属性。为此,您可以检查查询结果。

$location = City::where('slug',$location_id)->where('status','1')->first();

!empty($location->attribute)?$location->attribute:null;