質問編集履歴

3

コメントに対する追記

2016/06/30 06:02

投稿

jef12
jef12

スコア8

test CHANGED
File without changes
test CHANGED
@@ -99,3 +99,87 @@
99
99
  ->getSingleResult();
100
100
 
101
101
  ```
102
+
103
+
104
+
105
+ 2016/06/30 14:55 追記
106
+
107
+ ```
108
+
109
+ $em = $this->app['orm.em'];
110
+
111
+ $num = 4;←ランダム取得は4桁とする
112
+
113
+ $array = range(0, 9);←0~9までを配列に格納する
114
+
115
+
116
+
117
+ // 注文日をシステム日付から取得する
118
+
119
+ $today = date("y/m/d");←システム日付をyymmddの形式で取得
120
+
121
+ $year = substr($today, 0, 2);←日付のyy部分を取得
122
+
123
+ $month = substr($today, 3, 2);←日付のmm部分を取得
124
+
125
+ $day = substr($today, -2);←日付のdd部分を取得
126
+
127
+
128
+
129
+ $flg = 0;←重複フラグを設定
130
+
131
+
132
+
133
+ while ($flg == 0) {←重複フラグが0の間ループを回す
134
+
135
+ shuffle($array);←0~9の配列をシャッフルする
136
+
137
+ $orderNum = substr(implode($array), 0, $num);←シャッフルした配列を左から4桁分取得する
138
+
139
+
140
+
141
+ // 注文番号を10桁に結合する(月+日+年+ランダム4桁)
142
+
143
+ $orderId = $month.$day.$year.$orderNum;←mmddyy+ランダム4桁で結合する
144
+
145
+
146
+
147
+ // チェックデジットを取得する
148
+
149
+ $cd = $this->editOrderNumber($orderId);
150
+
151
+ $editOrderNum = $orderId.$cd;
152
+
153
+
154
+
155
+ // TODO DBを確認し、同じ注文番号がないこと。
156
+
157
+ $qb = $em->getRepository('Eccube\Entity\Order')
158
+
159
+ ->createQueryBuilder('o')
160
+
161
+ ->select('COUNT(o.order_number)')
162
+
163
+ ->where('o.order_number = :orderId')
164
+
165
+ ->setParameter('orderId', $editOrderNum)
166
+
167
+ ->setMaxResults(1);
168
+
169
+ $countOrderId = $qb
170
+
171
+ ->getQuery()
172
+
173
+ ->getResult();
174
+
175
+ if ($countOrderId == 0) {←カスタマイズした注文番号が0件の場合はフラグを立てる。1件存在する場合は再度処理を行うためフラグ操作はしない。
176
+
177
+ $flg = 1;
178
+
179
+ }
180
+
181
+ }
182
+
183
+ return $editOrderNum;
184
+
185
+ ```

2

コメントに対する追記

2016/06/30 06:02

投稿

jef12
jef12

スコア8

test CHANGED
File without changes
test CHANGED
@@ -71,3 +71,31 @@
71
71
 
72
72
 
73
73
  よろしくお願いいたします。
74
+
75
+
76
+
77
+ 追記
78
+
79
+ ・QueryBuilderで作成した新SQL
80
+
81
+ ```
82
+
83
+ $qb = $em->getRepository('Eccube\Entity\Order')
84
+
85
+ ->createQueryBuilder('o')
86
+
87
+ ->select('COUNT(o.order_number)')
88
+
89
+ ->where('o.order_number = :orderId')
90
+
91
+ ->setParameter('orderId', $orderId)
92
+
93
+ ->setMaxResults(1);
94
+
95
+ $countOrderId = $qb
96
+
97
+ ->getQuery()
98
+
99
+ ->getSingleResult();
100
+
101
+ ```

1

誤字ありのため修正

2016/06/30 05:36

投稿

jef12
jef12

スコア8

test CHANGED
File without changes
test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  ->where('o.order_number = :orderId')
34
34
 
35
- ->setParameter('orderId', '$orderId');
35
+ ->setParameter('orderId', $orderId);
36
36
 
37
37
  $countOrderId = $qb
38
38