有没有一种机制可以知道从应用程序发送的数据已成功插入到数据库中,就像在stored procedure
中一样,我们使用output parameter
。
我们如何确保将数据插入数据库,以及如果数据插入操作失败,如何捕获错误原因并以用户友好的方式显示?
// controller code
public function store(Request $request)
{
$validatedInput = $request -> validate([
'NBookName' => 'required|string|min:3|max:100',
'NBookId' => 'required|string|min:2|max:10|unique:books,BookID', // unique:table_name,column_name
'NBookUnitPrice' => 'required|max:5|'
]);
$book = new Book;
$book -> BookName = $request->input('NBookName');
$book -> BookID = $request->input('NBookId');
$book -> BookUnitPrice = $request->input('NBookUnitPrice');
$book->save();
return view('pages.about');
}
答案 0 :(得分:0)
雄辩的方法save
返回true
或false
,因此检查保存的返回将使您知道操作是否成功。
您也可以使用方法saveOrFail
,该方法也将返回true
/ false
,但也可以给出Throwable
摘自文档:https://laravel.com/api/5.3/Illuminate/Database/Eloquent/Model.html#method_save
示例:
if( $book->save() ){
return response()->json($book, 200);
} else {
return response()->json(['error' => 'Could not save'], 400);
}
或
try {
$book->saveOrFail();
return response()->json($book, 200);
} catch( \Exception $e ){
return response()->json(['error' => $e->getMessage()], 400);
}
答案 1 :(得分:0)
save()将返回一个已保存或未保存的布尔值。因此,您可以执行“赞”:
$saved = $book->save();
if(!$saved)
{
App::abort(500, 'Error');//Or return any message to view
}
有关更多详细信息:check-if-laravel-model-got-saved-or-query-got-executed
答案 2 :(得分:0)
我将从分离图层开始,我不喜欢看验证,雄辩的查询并在同一位置查看相关输出。
在阅读下面的答案之前,请看一下
https://laravel.com/docs/5.6/validation#form-request-validation
我将使中间件对用户进行身份验证和授权,然后使用formrequests来验证输入数据,并在其到达控制器时,对用户进行身份验证,授权,数据验证,而所需要做的就是打电话给负责插入操作,并将某些内容返回到UI。
”我们如何确保将数据插入数据库和 数据插入操作失败的情况”
通常,可以尝试捕获:
public function store(Request $request)
{
try {
$validatedInput = $request -> validate([
'NBookName' => 'required|string|min:3|max:100',
'NBookId' => 'required|string|min:2|max:10|unique:books,BookID', // unique:table_name,column_name
'NBookUnitPrice' => 'required|max:5|'
]);
$book = new Book;
$book -> BookName = $request->input('NBookName');
$book -> BookID = $request->input('NBookId');
$book -> BookUnitPrice = $request->input('NBookUnitPrice');
$book->save();
} catch (\Exception $e) {
// return your pretty response
// If the operation saving to the database fails, you'll get the information here on whatever it is about,
// as the generic exception catchs it. It should catch the stored procedure output aswell
}
return view('pages.about');
}
如果您打算进行一系列插入和更新/删除,而又不想让它们破坏逻辑(插入一些并在1错误时停止插入),则可以use DB;
并使用{{ 1}},DB::beginTransaction()
和DB::commit()
在您的代码上