存在方法在 Laravel 中无法按预期工作以检查行存在



我正在开发一个小的休息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))
        );
    } 

但是当我的代码看起来写得很好并且我遇到与销毁方法完全相同的问题时,也没有任何效果:

 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);
    }

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

如果您

使用的是 php7,最好检查变量是否具有值null或使用空合并运算符。

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

我首先想做的是在出现错误的情况下返回 消息和代码 404 代码状态,如以下代码

findOrFail()方法正是针对这种情况存在的:

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

如果未找到模型,findOrFail()将抛出 ModelNotFoundException,从而导致返回 404。

exists()是一个

生成器方法,您正在模型实例上执行它。

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

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

最新更新