我正在使用一个小的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);
}
答案 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