请问老师:为什么这样循环不能插入三条数据?我想把订单与消费券改成一对多的关系

来源:11-3 订单入库逻辑开发

PanameraTurboS

2017-05-30

$chars = 'abcdefghijkmnopqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ23456789';
       $coupons = [];
       $couponsPass = [];
       //根据购买数量产生消费券(比如是3)
      for ($i=0; $i < 3; $i++) {
//           print_r($i);
          for($j=0; $j<10; $j++) {
              $coupons[$i].= $chars[ mt_rand(0, strlen($chars) - 1) ];
          }
          for($j=0; $j<5; $j++) {
              $couponsPass[$i] .= random_int(0, 9);
          }
          //加密后存库
          $coupons[$i] = md5($coupons[$i]);
          $couponsPass[$i] = md5($couponsPass[$i]);
//        print_r($data['coupons']);die();
          // 获取订单数据(因为订单数据里有很多可以与消费券表共用的信息)
//        print_r($order->toArray());die();
          //消费券待入库数据
          $couponsData = [
              'coupons_number' => $coupons[$i],
              'coupons_pass' => $couponsPass[$i],
              'user_id' => $order['user_id'],
              'goods_id' => $order['goods_id'],
              'order_id' => $id,
              'shop_id' => $order['shop'],
              'bis_id' => $order['bis_id'],
          ];
          //消费券入库
           model('Coupons')->save($couponsData);
      }

以上代码会提示未定义数组下标0,请老师帮忙看看。除了出错,还想知道这样能不能实现3条数据的录入,如果不能,改如何才能实现?

写回答

4回答

PanameraTurboS

提问者

2017-05-30

看了文档,批量插入用savaAll方法,已经解决。

1
1
singwa
好的,赞赞赞
2017-05-30
共1条回复

PanameraTurboS

提问者

2017-05-30

发现 model('Coupons')->saveAll($couponsData);能存多条,但是后边那条会包含前边那条的信息...所以这样也是错的

0
0

PanameraTurboS

提问者

2017-05-30

代码改成以下方法就实现了,原来还有saveAll方法...

$chars = 'abcdefghijkmnopqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ23456789';
       $coupons= [];
       $couponsPass = [];
       $coupon = '';
       $couponPass = '';
       $couponsData = [];
       $i = 0;
       //根据购买数量产生消费券消费券
      for ($i; $i < $count; $i++) {
//           print_r($i);
          for($j=0; $j<10; $j++) {
              $coupon .= $chars[ mt_rand(0, strlen($chars) - 1) ];
          }
          for($j=0; $j<5; $j++) {
              $couponPass .= random_int(0, 9);
          }
          $coupons[$i] = $coupon;
          $couponsPass[$i] = $couponPass;
          //加密后存库
          $coupons[$i] = md5($coupons[$i]);
          $couponsPass[$i] = md5($couponsPass[$i]);
//        print_r($data['coupons']);die();
          // 获取订单数据(因为订单数据里有很多可以与消费券表共用的信息)
//        print_r($order->toArray());die();
          //消费券待入库数据
          $couponsData[$i] = [
              'coupons_number' => $coupons[$i],
              'coupons_pass' => $couponsPass[$i],
              'user_id' => $order['user_id'],
              'goods_id' => $order['goods_id'],
              'order_id' => $id,
              'shop_id' => $order['shop'],
              'bis_id' => $order['bis_id'],
          ];

      }
      $res = model('Coupons')->saveAll($couponsData);

0
0

PanameraTurboS

提问者

2017-05-30

代码改成一下写法,可以实现插入数据,没有报错,但是无论$count是什么数字,都只插入一条结果,请问为什么?循环的次数为什么不是$count的值?

       $chars = 'abcdefghijkmnopqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ23456789';
       $coupons= [];
       $couponsPass = [];
       $coupon = '';
       $couponPass = '';
       $i = 0;
       //根据购买数量产生消费券消费券
      for ($i; $i < $count; $i++) {
//           print_r($i);
          for($j=0; $j<10; $j++) {
              $coupon .= $chars[ mt_rand(0, strlen($chars) - 1) ];
          }
          for($j=0; $j<5; $j++) {
              $couponPass .= random_int(0, 9);
          }
          $coupons[$i] = $coupon;
          $couponsPass[$i] = $couponPass;
          //加密后存库
          $coupons[$i] = md5($coupons[$i]);
          $couponsPass[$i] = md5($couponsPass[$i]);
//        print_r($data['coupons']);die();
          // 获取订单数据(因为订单数据里有很多可以与消费券表共用的信息)
//        print_r($order->toArray());die();
          //消费券待入库数据
          $couponsData = [
              'coupons_number' => $coupons[$i],
              'coupons_pass' => $couponsPass[$i],
              'user_id' => $order['user_id'],
              'goods_id' => $order['goods_id'],
              'order_id' => $id,
              'shop_id' => $order['shop'],
              'bis_id' => $order['bis_id'],
          ];
          //消费券入库
//           print_r($coupons[$i]);
          $res = model('Coupons')->save($couponsData);
      }

0
0

Thinkphp5.0仿百度糯米开发多商家电商平台

【毕设】BAT大牛亲授ThinkPHP 5.0,实战中学透新技能,应用于工作

2439 学习 · 1711 问题

查看课程