0

For example, I use:

return User::findOrFail($id);

When row does not exist with $id I get exception.

How I can return this exception in Json response? It returns HTML Laravel page now.

I need something like as:

{"error", "No query results for model"}
4

3 回答 3

2

您可以处理各种类型的异常,在这种情况下可以使用 ModelNotFoundException 处理该异常

try{
    $user = User::findOrFail($id);
}catch(ModelNotFoundException $e){
    return response()->json(['error' => 'User not found'], 400);
}

还有另一种方法可以在位于 app/Exceptions/Handler.php 的 Handler.php 中捕获各种类型的异常,您可以在该 render函数中捕获异常并返回您想要的任何内容。

例如,在该函数中,您可以在return parent::render($request, $e):

if($e instanceof ModelNotFoundException)
{
    return new Response(['message' => 'We haven\'t find any data'], 204);
}
于 2016-07-19T20:06:59.443 回答
2

从他们的文档中:

有时,如果找不到模型,您可能希望抛出异常。这在路由或控制器中特别有用。findOrFail 和 firstOrFail 方法将检索查询的第一个结果。但是,如果没有找到结果,则会抛出 Illuminate\Database\Eloquent\ModelNotFoundException。

因此,您可以捕获该异常,也可以使用简单的Find方法。如果找不到,它将返回 false,因此您可以相应地处理它。

return User::find($id);

更新

选项 1

try {
    return User::findOrFail($id);
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
    return json_encode(['error' => 'No query results for model']);
}

选项 2

$user = User::find($id);
if($user) {
    return $user;
}
return json_encode(['error' => 'No query results for model']);
于 2016-07-19T19:48:51.427 回答
0

您应该查看处理程序文件render的方法。您可以在此处测试异常类,并根据它以 Json 格式返回不同的响应

于 2016-07-19T19:56:10.837 回答