美文网首页
laravel事务

laravel事务

作者: IT宝哥哥 | 来源:发表于2020-05-30 09:58 被阅读0次
if ($result) {
            //修改详情
            $goodsDetails = GoodsDetails::query()->firstWhere('goods_id',$good->id);

        //如果查询成功返回一个Model,如果失败,返回一个null

            if(empty($goodsDetails)){
                return $this->status('修改商品失败', '', 400);
            }
            $update = $goodsDetails->update($request->only(['picture','video','sort','content']));
//返回一个 bool 或者 int (updated record更新的条目)
            if(!$update){
                return $this->status('修改商品失败', '', 400);
            }
            return $this->status('修改商品成功', '', 200);
        } else {

            return $this->status('修改商品失败', '', 400);
        }


//添加详情
            $goodsDetails = GoodsDetails::query()
                ->create(array_merge(['goods_id'=>$good->id],$request->only(['picture','video','sort','content'])));

        //返回Model或者null

            if(empty($goodsDetails)){
                $good->delete();


        //返回bool或者null(不存在)


                return $this->status('商品添加失败', '', 400);
            }
            return $this->status('商品添加成功', '', 200);


DB::transaction(function()use($request){
            //$insertGetId = DB::table('goods')->insertGetId(array_merge([],$request->only

(['goods_type_id','goods_name','goods_thumbnail','price','stock','status'])));
            //throw new \Exception('error');//抛出异常会回滚
            //$insert = DB::table('goods_details')->insert(array_merge(['goods_id' => $insertGetId], $request->only

(['picture','video','sort','content'])));

            $model = Goods::query()->create(array_merge([], $request->only(['goods_type_id', 'goods_name', 

'goods_thumbnail', 'price', 'stock', 'status'])));
            if(!empty($model)){
                //throw new Exception('商品添加失败');//Model操作抛出异常会卡住?;
            }
            $goodsDetails = GoodsDetails::query()->create(array_merge(['id'=>1,'goods_id' => $model->getAttribute('id')], 

$request->only(['picture','video','sort','content'])));
            DB::rollBack();//Model如果想要回滚必须配合rollBack
        });

//使用DB::transaction,如果在闭包中抛出异常可以自动回滚
//使用DB:begin 可以自由控制rollback或者commit

//事务最佳实践
$code = 200;
        try {
            DB::transaction(function () use ($request) {
                $goods = Goods::query()->create(array_merge([], $request->only(['goods_type_id', 'goods_name', 'goods_thumbnail', 'price', 'stock', 'status'])));
                if (empty($goods)) {
                    $code = 400;
                    throw new \Exception('商品添加失败');
                }
                $goodsDetails = GoodsDetails::query()->create(array_merge(['id' => 1, 'goods_id' => $goods->getAttribute('id')], $request->only(['picture', 'video', 'sort', 'content'])));
                if (!empty($goodsDetails)) {
                    $code = 400;
                    throw new \Exception('商品详情添加失败');
                }
            });
        }catch (\Exception $e){
            return $this->status($e->getMessage(), '', $code);
        }
        return $this->status('商品添加成功', '', $code);

相关文章

  • Laravel 文章汇集

    LARAVEL .ENV文件配数组laravel redis操作大全laravel5篇之使用事务laravel多库...

  • laravel事务

  • laravel transaction 数据库事务

    laravel 提供专门的闭包的数据库事务,可以自动回滚事务也可以手动回滚事务

  • laravel--事务

    表必须是InnoDB引擎

  • laravel事务笔记

    事务是把一系列数据库操作当作一个逻辑单元执行,也就是说,事务中的一系列 SQL 语句要么都执行成功,要么都失败,事...

  • 精华总结

    1. laravel中事务嵌套事务会怎么样? 在MySQL的官方文档中有明确的说明不支持嵌套事务,但是在larav...

  • Laravel事务使用

    原文:https://blog.csdn.net/da_guo_li/article/details/788578...

  • laravel 事务与锁

    结论: 首先访问了test接口后再访问testName接口,发现testName接口没有一直处在request请求...

  • laravel - 跨库事务

    在平时工作中 很多时候会碰到 要求数据一致性的场景这个时候必不可少的 要应用到事务背景:朋友用laravel 在开...

  • laravel 事务与锁

    重构代码时,发现了一些问题,关于laravel锁与事务之间的问题,主要有下面列出的几个问题. 事务的代码如何书写。...

网友评论

      本文标题:laravel事务

      本文链接:https://www.haomeiwen.com/subject/tolczhtx.html