这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战
一、订单详情管理
1.1 创建订单控制器
运行命令php artisan make:controller Web/OrderController
创建订单控制器:
写入订单管理相关的方法:
1 | php复制代码<?php |
1、我们这边暂时还没做地址管理api,所以地址暂时用模拟
2、由于创建订单涉及到多表操作,万一一步操作错了,可能会产生未知的bug,所以我们这边使用事务来进行异常捕获并抛出。
由于往订单表中插入数据,所以我们还要往订单表中写入可批量赋值的字段:
由于也往订单详情表中插入了数据,所以也需要往订单详情表中插入可批量的字段:
接着在订单模型中写入远程一对多,这样我们就可以跳过中间订单详情表,直接通过订单模型获取到商品数据:
1 | php复制代码 /** |
增加订单OrderTransformer.php
的商品数据:
1 | php复制代码 /** |
1、任务调度订单过时未付取消
由于下单了就会减少库存,为了防止有些人恶意下单,减库存,所以我们可以做个任务调度,做个订单多久失效。
输入命令:crontab -e
,输入1回车:
在编辑器中输入* * * * * /home/vagrant/code/shopProjectApi/artisan schedule:run >> /dev/null 2>&1
。你的项目的绝对路径。
然后controller + x
输入y
保存退出。
然后在 App\Console\Kernel
中输入:
1 | php复制代码// 定时检测订单状态,超过10分钟未支付的,作废 |
这样在订单过期时,将会把订单状态设置成5,并且商品数量将回滚:
1.2 创建订单路由
1 | php复制代码 /** |
1.3 测试效果
测试的时候我们发现报错了,原因是我们之前在建订单表时,将订单单号设置成了integer
所以我们来修改下这个字段的类型。
首先运行命令composer require doctrine/dbal
。
接着运行:php artisan make:migration modify_order_no_column_in_orders_table --table=orders
创建修改该字段的迁移文件:
接着写入:$table->string('order_no')->comment('订单单号')->change();
好的类型就修改好了。
接下来测试:
可以看到生成了订单,并且购物车中数据也没了。
在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。
本文转载自: 掘金