前情提要:最近想做个卖个人想法的网站,姑且可以称为头脑风暴聚集地。每个人都有一些新奇的想法,过一段时间就忘了,为什么不出售他们呢?OK,有点脱离主题了,因为想自己做一个简单的商城玩玩,顺便用下Laravel的新版本(喜欢尝鲜),稍微总结一下。
问题抛出:商品的表应该怎么设计?
一般情况下,我个人习惯将商品信息和规格分成两张表。商品信息表(记录除规格的相关信息)和商品规格表(记录规格)。了解商品与商品 SKU 的关系的一般都会将商品的信息和规格(单品)分开,当然不是绝对的,曾经有人争论过,这里不多说。
问题抛出:订单号生成应该注意哪些?
一般来说,订单号都是年月日时分秒+随机数生成的。随机数位数的多少在于并发考虑,比如,每秒10万访问量,就是6位随机数。那有没有可能重复呢?当然是有可能得,万一同一秒随机出两个一样的呢对不对,所以我们可以把生成的这个过程放在一个for
循环里面,然后再去数据库里面查询加以判断。
public static function creatNo()
{
// 订单流水号前缀
$prefix = date('YmdHis');
for ($i = 0; $i < 10; $i++) {
// 随机生成 6 位的数字,不足6位的在右边补0
$no = $prefix.str_pad(random_int(0, 999999), 6, '0', STR_PAD_RIGHT);
// 判断是否已经存在,如果不存在返回订单号,存在记录日志
if (!static::query()->where('no', $no)->exists()) {
return $no;
}
}
\Log::warning('find order no failed');
return false;
}
问题抛出:生成订单的时候应该考虑哪些因素?
当我们创建订单的时候,我们首先应该考虑订单号有没有重复,当然这个我们在生成订单号的时候已经判断了。接着我们应该考虑商品存不存在,商品有没有上架,商品有没有库存,最后再判断购买的数量我们的库存是否不足。这些不太建议写在Controller
里面,这可能会造成控制器的臃肿,我们可以写在Request
里面。
问题抛出:下单后不支付该怎么处理?
这里我们可以用队列任务,比如设定半小时不支付就关闭订单。我想这个处理方法时比较好的。
问题抛出:控制器太臃肿怎么办?
推荐使用Service 模式,推荐一篇文章如何使用Service模式?。
欢迎指正;欢迎补充;欢迎留言 ——@Jouzeyu