存在的方法无法在laravel中检查行是否存在

时间:2019-01-31 10:34:08

标签: php laravel

我正在使用一个小的Rest API,并且在我的控制器中,json响应仅在$object->exists()返回1时有效,但在其他情况下会发送错误 这是我的代码:

 public function show($id)
    {
        $category=Category::find($id);
        return response()->json(
          ($category->exists()?$category:["message"=>"not found"])
        );
    }

找到类别后,我在json format中返回行,并且在false情况下不起作用。 我首先想做的是,在error返回消息和代码404 code status的情况下,如下所示:

public function show($id)
    {
        $category=Category::find($id);
        return response()->json(
          ($category->exists()?$category:(["message"=>"not found"],404))
        );
    } 

但是当我的代码看起来写得很好并且我使用destroy方法遇到了完全相同的问题时,却没有任何效果:

 public function destroy($id)
    {
      $category=Category::find($id);
      if($category->exists()){
        $category->delete();
        return response()->json(array("message"="category deleted","success"=>true));
      }
        return response()->json(array("message"=>"Not found"),404);
    }

3 个答案:

答案 0 :(得分:4)

当记录实际上存在于数据库中时,使用Category::find($id);将返回一个Category对象。但是,如果记录不存在,它将返回null。因此,您试图在exists()上调用函数null,这是不可能的。

如果您使用的是php7,最好检查变量的值是否为null或使用null coalescing operator

$category = Category::find($id);
return response()->json(
    $category ?? ["message" => "not found"], 
    404
);

答案 1 :(得分:1)

  

我首先要做的是在返回错误的情况下   如下面的代码信息和代码404的代码状态

findOrFail()方法存在恰好这种情况下:

public function show($id)
{
    $category = Category::findOrFail($id);
    return $category;
}

如果未找到任何模型,findOrFail()将引发ModelNotFoundException,该异常导致返回404。

答案 2 :(得分:0)

exists()是一种构建器方法,您正在模型实例上执行它。

由于您已经从数据库中获取模型实例,因此可以检查它是否为空。您可以执行以下操作:

empty($category) ? ["message"=>"not found"] : $category