如何防止获取消息:在找不到id时尝试获取非对象的属性

时间:2017-07-24 13:14:50

标签: php ajax laravel-5.4

现在我有这个控制器从db获取id而不是从db列出som信息。但是当我进入数据库并手动删除数据时,控制器再也找不到id并返回:尝试获取非对象的属性 与女贞信息的planti。我的conde如下所示:

    public function saveChanges(Request $request){
  $id=$request->input('id');

  $this->validate($request, [
    'title' => 'required',
    'body' => 'required|min:2'
  ]);


  $post=Post::where('id',$id)->first();
  if($post->id == $id){
  $post->title = $request['title'];
  $post->postBody = $request['body'];



  if ($post->update())
  {
    return response()->json([
      'type'=>1,
      'newtitle'=>$post->title,
      'newbody'=>$post->postBody
    ]);
  }
  else{
    return response()->json(['type'=>0]);
  }
}

else {
  echo"404";
}

}

我不喜欢这里的东西就像这样直接使用id:

$post=Post::where('id',$id)->first();

我对laravel不太了解所以你认为我可以通过任何机会阻止这种情况吗?

2 个答案:

答案 0 :(得分:0)

首先你应该检查对象Post是否存在,例如通过函数is_object() http://php.net/is_object

答案 1 :(得分:0)

根据建议,在尝试访问房产之前先检查是否找到了帖子:

$post = Post::where('id',$id)->first();

if ($post instanceof Post && $post->id == $id) {
    // ...
}

供参考,见: