我有laravel项目 现在我有项目表连接多ather表 比如item_state item_colors item_barcode等 现在在添加项目的页面中确定 在商店功能我有这个代码
public function store(Request $request)
{
$item = new Item;
$item->item_id = $request['item_id'];
$item->item_desc_ar = $request['item_desc_ar'];
$item->item_desc_en = $request['item_desc_en'];
$item->item_default_unit = $request['item_default_unit'];
$item->item_color = $request['item_color'];
$item->item_width = $request['item_width'];
$item->item_length = $request['item_length'];
$item->item_height = $request['item_height'];
$item->item_inserter = Auth::user()->id;
$item->item_state = $request['item_state'];
$item->item_note = $request['item_note'];
$item->save();
$item_barcode = new Item_barcode;
$item_barcode->item_barcode_item_id = $item->id;
$item_barcode->item_barcode_barcode = $request->item_barcode;
$item_barcode->item_barcode_unit = $request->item_default_unit;
$item_barcode->save();
foreach($request->category_id as $item_categorys)
{
$item_category = new item_category;
$item_category->category_id = $item_categorys;
$item_category->item_id = $item->id;
$item_category->save();
}
$item_price = new Item_price;
$item_price->item_price_item_id = $item->id;
$item_price->item_price_price = $request->item_price;
$item_price->item_price_unit_id = $request->item_default_unit;
$item_price->save();
$count = 1;
foreach($request->image as $image)
{
if(!empty($image))
{
$image_id = $item['id'];
if(!file_exists(public_path()."/uploads/items/$image_id"))
File::makeDirectory(base_path()."/public/uploads/items/$image_id");
$file = $image;
$file->move('uploads/items/'.$image_id,$count.'.jpg');
}
$count++;
}
}
现在我想做交易,如果没有添加项目或代码中的任何错误都没有在ather表中发生 就像laravel中的交易一样 但它不适用于elequent模型 谢谢 。
答案 0 :(得分:1)
在这种情况下,您将讨论数据库事务:
https://laravel.com/docs/5.5/database#database-transactions
您需要在事务闭包中包装您的查询:
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
}, 5);
或手动开始交易:
DB::beginTransaction();
如果失败则:
DB::rollBack();
最后:
DB::commit();
成功。
这是一篇详细介绍交易的好文章。
http://fideloper.com/laravel-database-transactions
DB::beginTransaction();
try {
$item = new Item;
$item->item_id = $request['item_id'];
$item->item_desc_ar = $request['item_desc_ar'];
$item->item_desc_en = $request['item_desc_en'];
$item->item_default_unit = $request['item_default_unit'];
$item->item_color = $request['item_color'];
$item->item_width = $request['item_width'];
$item->item_length = $request['item_length'];
$item->item_height = $request['item_height'];
$item->item_inserter = Auth::user()->id;
$item->item_state = $request['item_state'];
$item->item_note = $request['item_note'];
$item->save();
$item_barcode = new Item_barcode;
$item_barcode->item_barcode_item_id = $item->id;
$item_barcode->item_barcode_barcode = $request->item_barcode;
$item_barcode->item_barcode_unit = $request->item_default_unit;
$item_barcode->save();
foreach($request->category_id as $item_categorys)
{
$item_category = new item_category;
$item_category->category_id = $item_categorys;
$item_category->item_id = $item->id;
$item_category->save();
}
$item_price = new Item_price;
$item_price->item_price_item_id = $item->id;
$item_price->item_price_price = $request->item_price;
$item_price->item_price_unit_id = $request->item_default_unit;
$item_price->save();
$count = 1;
foreach($request->image as $image)
{
if(!empty($image))
{
$image_id = $item['id'];
if(!file_exists(public_path()."/uploads/items/$image_id"))
File::makeDirectory(base_path()."/public/uploads/items/$image_id");
$file = $image;
$file->move('uploads/items/'.$image_id,$count.'.jpg');
}
$count++;
}
DB::commit();
} catch (Exception $e) {
DB::rollBack();
}
答案 1 :(得分:1)
DB::beginTransaction();
try{
//Code which can throw error
DB::commit();
}catch(Exception $e){
DB::rollBack();
}