创建商品表goods
$table->bigIncrements('id');
$table->integer('user_id', false)->comment('创建者id');
$table->integer('category_id', false)->comment('分类id');
$table->string('title',200)->comment('商品标题');
$table->integer('price', false)->comment('价格');
$table->string('norms',100)->comment('规格');
$table->integer('stork', false)->comment('库存');
$table->integer('num', false)->default(1)->comment('数量');
$table->string('descript',255)->nullable()->comment('备注');
创建订单表orders
$table->bigIncrements('id');
$table->integer('user_id')->comment('购买者用户id');
$table->integer('order_id')->comment('订单id');
$table->integer('amount')->comment('金额');
$table->integer('status')->comment('状态: 1下单, 2支付, 3发货, ');
$table->integer('address_id')->comment('地址');
$table->string('express_type')->comment('快递类型: SF, YT, YD');
$table->string('express_no',255)->comment('快递单号');
$table->timestamp('pay_time')->comment('支付时间');
$table->string('pay_type', 10)->comment('支付类型: alipay, wechat');
$table->string('trade_no', 255)->comment('交易单号');
$table->timestamps();
创建订单详情表order_details
$table->bigIncrements('id');
$table->integer('order_id')->comment('所属订单');
$table->integer('goods_id')->comment('商品id');
$table->integer('price')->comment('价格');
$table->integer('num')->comment('商品数量');
$table->timestamps();
自己目前处理学习laravel中, 可能有些地方不对, 要是有错误的地方, 比如支付的时候逻辑的处理可以分享与我, 自己刚接触没有支付经验, 如有分享 万分感谢
1. 订单预览
// 预览订单
public function preview()
{// TODO 暂时模拟的地址$address = [['id' => 1, 'address' => '北京']];// 获取购物车的数据$carts = Cart::where('user_id', auth()->user()->id)->where('is_checked', 1) //选中的->with('goods:id,title,cover') //关联商品表,只显示id,title,cover是三个字段->get();return response()->json(['code' => 200, 'data' => $carts]);
}
2. 订单创建
public function post(Request $request)
{$request->validate(['address_id' => 'required']);// 处理插入数据$user_id = auth()->user()->id;// 订单号 自己生成$order_no = date('YmdHis').rand(100000, 999999);// 计算购物车总价$amount = 0;// 定义要插入订单详情的数据$insertData = [];$carts = Cart::where('user_id', auth()->user()->id)->where('is_checked', 1) //选中的->with('goods:id,title,cover, stock') //关联商品表,只显示id,title,cover是三个字段->get();foreach ($carts as $key => $val) {// 如果有商品库存不足, 提示用户重新选择if ($val->goods->stock < $val->num) {return response()->json(['code' => 500]);}// 这里不应该在这里写, 应该在加入购物车控制器里写// 加入购物车那里也要判断商品库存不足问题 && 加入购物车时重复商品 数量要++// 判断购物车数据是否存在$cart = Cart::where('user_id', auth()->user()->id)->where('goods_id', $request->input('goods_id'))->first();if (!empty($cart)) {$cart->num = $request->input('num', 1);$cart->save();}$insertData[] = ['good_id' => $val->goods->id,'price' => $val->goods->price,'num' => $val->num];$amount += $val->goods->price * $val->num;}try {DB::beginTransaction();// 生成订单Order::create(['user_id' => auth()->user()->id,'user_no' => $order_no,'address_id' => $request->input('address_id'),'amount' => $amount]);// 生成订单的详情; 这里要往订单详情里插入数据的话, 需要一个order_id字段, 因为订单模型里面 关联了订单细节的模型, 会自把关联的字段填充到数组里// Order->orderDetails() 就会建立构造器$order->orderDetails()->createMany($insertData);// 删除已经结算的购物车数据Cart::where('user_id', auth()->user()->id)->where('is_checked', 1) //选中的->delete();// 减去商品对应的库存量foreach ($carts as $val) {Good::where('id', $val->goods_id)->decrement('stork', $val->num);}DB::commit();return response()->json(['code' =>200]);} catch (Exception $e) {DB::rollback();throw $e;}// TODO 接下来 要用到计划任务, 处理订单失效的功能....
}
本文发布于:2024-02-01 07:54:03,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170674524535019.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |