質問するログイン新規登録

質問編集履歴

3

コメントに対する追記

2016/06/30 06:02

投稿

jef12
jef12

スコア8

title CHANGED
File without changes
body CHANGED
@@ -48,4 +48,46 @@
48
48
  $countOrderId = $qb
49
49
  ->getQuery()
50
50
  ->getSingleResult();
51
+ ```
52
+
53
+ 2016/06/30 14:55 追記
54
+ ```
55
+ $em = $this->app['orm.em'];
56
+ $num = 4;←ランダム取得は4桁とする
57
+ $array = range(0, 9);←0~9までを配列に格納する
58
+
59
+ // 注文日をシステム日付から取得する
60
+ $today = date("y/m/d");←システム日付をyymmddの形式で取得
61
+ $year = substr($today, 0, 2);←日付のyy部分を取得
62
+ $month = substr($today, 3, 2);←日付のmm部分を取得
63
+ $day = substr($today, -2);←日付のdd部分を取得
64
+
65
+ $flg = 0;←重複フラグを設定
66
+
67
+ while ($flg == 0) {←重複フラグが0の間ループを回す
68
+ shuffle($array);←0~9の配列をシャッフルする
69
+ $orderNum = substr(implode($array), 0, $num);←シャッフルした配列を左から4桁分取得する
70
+
71
+ // 注文番号を10桁に結合する(月+日+年+ランダム4桁)
72
+ $orderId = $month.$day.$year.$orderNum;←mmddyy+ランダム4桁で結合する
73
+
74
+ // チェックデジットを取得する
75
+ $cd = $this->editOrderNumber($orderId);
76
+ $editOrderNum = $orderId.$cd;
77
+
78
+ // TODO DBを確認し、同じ注文番号がないこと。
79
+ $qb = $em->getRepository('Eccube\Entity\Order')
80
+ ->createQueryBuilder('o')
81
+ ->select('COUNT(o.order_number)')
82
+ ->where('o.order_number = :orderId')
83
+ ->setParameter('orderId', $editOrderNum)
84
+ ->setMaxResults(1);
85
+ $countOrderId = $qb
86
+ ->getQuery()
87
+ ->getResult();
88
+ if ($countOrderId == 0) {←カスタマイズした注文番号が0件の場合はフラグを立てる。1件存在する場合は再度処理を行うためフラグ操作はしない。
89
+ $flg = 1;
90
+ }
91
+ }
92
+ return $editOrderNum;
51
93
  ```

2

コメントに対する追記

2016/06/30 06:02

投稿

jef12
jef12

スコア8

title CHANGED
File without changes
body CHANGED
@@ -34,4 +34,18 @@
34
34
  ご存知の方がいらっしゃいましたらご教示お願いいたします。
35
35
  ヒントでも構いません。
36
36
 
37
- よろしくお願いいたします。
37
+ よろしくお願いいたします。
38
+
39
+ 追記
40
+ ・QueryBuilderで作成した新SQL
41
+ ```
42
+ $qb = $em->getRepository('Eccube\Entity\Order')
43
+ ->createQueryBuilder('o')
44
+ ->select('COUNT(o.order_number)')
45
+ ->where('o.order_number = :orderId')
46
+ ->setParameter('orderId', $orderId)
47
+ ->setMaxResults(1);
48
+ $countOrderId = $qb
49
+ ->getQuery()
50
+ ->getSingleResult();
51
+ ```

1

誤字ありのため修正

2016/06/30 05:36

投稿

jef12
jef12

スコア8

title CHANGED
File without changes
body CHANGED
@@ -15,7 +15,7 @@
15
15
  ->createQueryBuilder('o')
16
16
  ->select('COUNT(o.order_number)')
17
17
  ->where('o.order_number = :orderId')
18
- ->setParameter('orderId', '$orderId');
18
+ ->setParameter('orderId', $orderId);
19
19
  $countOrderId = $qb
20
20
  ->getQuery()
21
21
  ->getSingleResult();