質問 > その他 > 注文番号について |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
blue3 |
投稿日時: 2016/6/29 14:50
対応状況: −−−
|
新米 登録日: 2016/6/24 居住地: 投稿: 9 |
注文番号について 注文番号をカスタマイズしたいと考えています。
初歩的な部分かと思いますが、勉強し始めのためお手柔らかにお願いいたします。 日付+連番の10桁にしようと考えています。 日付の形式ですが yymmddとして受注情報のcreateDateから取得し使用したいと思います。 連番は、デフォルトでの注文番号にしようと考えています。 ShopService.phpで受注情報を確定したのちに カスタマイズをして新注文番号を設定しようとしています。 dump($Order->getCreateDate()); これで、作成日時が取れてはいるのですが ShoppingService.php on line 213: DateTime {#1811 ▼ +"date": "2016-06-29 14:46:44.000000" +"timezone_type": 3 +"timezone": "Asia/Tokyo" } このdateの項目の値をどのようにして取得し使用できるのでしょうか? また、このままだとdatetime型かと思うのでstringにしたいのですが上のを$dateに格納した場合 $stringDate = (string)$date; でよいのでしょうか? ご教示お願いいたします。 |
blue3 |
投稿日時: 2016/6/30 9:37
対応状況: −−−
|
新米 登録日: 2016/6/24 居住地: 投稿: 9 |
Re: 注文番号について 日付はcreateDateから取得もシステム日付から取得も変わらないということを忘れていたためシステム日付から取得するように変更し、上記課題は解決できました。
形式は変更し、mmddyyとランダム4桁(0〜9を10の配列に格納しシャッフルし並び替え後の4桁を取得する形です) 以下が、作成したコードになります。 public function getCustomizeOrderId() { $num = 4; $array = range(0, 9); // 注文日をシステム日付から取得する $today = date("y/m/d"); $year = substr($today, 0, 2); $month = substr($today, 3, 2); $day = substr($today, -2); $flg = 0; while ($flg == 0) { shuffle($array); $orderNum = substr(implode($array), 0, $num); // 注文番号を10桁に結合する(月+日+年+ランダム4桁) $orderId = $month.$day.$year.$orderNum; // TODO DBを確認し、同じ注文番号がないこと。 if (カウント結果 == 0) { $flg = 1; } } return $orderId; } しかし、このままではランダムの並べ替えのため必ずしもかぶりが出ないとは限りません。日付違いでのランダム部分の被りはよいのですが… そのため、一度結合させたのちにDBに重複する注文番号が存在しないことを確認しないといけません。 そこで、以下のようなSQLで同じ注文番号がないことを確認します。 SELECT COUNT(o.order_number) FROM dtb_order o WHERE o.order_number = 結合した注文番号 order_numberは別途自分で作成した、カスタマイズした注文番号が格納されているカラムです。 この場合、ここで書くSQLはどのように書けるのでしょうか? ヒントのご教示をいただければ幸いです。 よろしくお願いいたします。 |
blue3 |
投稿日時: 2016/6/30 9:55
対応状況: −−−
|
新米 登録日: 2016/6/24 居住地: 投稿: 9 |
Re: 注文番号について 先ほどの引用:
ここの部分を以下のように記載してみましたがエラーとなってしまいました。whileはflgが0の間繰り返すようになっているかと思うので、重複していない場合はフラグを1にしてループ抜けを、重複している場合はflgの値を変えずに再度生成という形にしている予定なのですが… 最下部にエラー情報を記載いたします。 // TODO DBを確認し、同じ注文番号がないこと。 $qb = $em->getRepository('Eccube\Entity\Order') ->createQueryBuilder('o') ->select('COUNT(o.order_number)') ->where('o.order_number = :orderId') ->setParameter('orderId', '$orderId'); $countOrderId = $qb ->getQuery() ->getSingleResult(); dump($countOrderId); if ($countOrderId == 0) { $flg = 1; } Apacheのエラーログは以下の通りです。 メモリが足りてないって感じなのですかね?? [Thu Jun 30 09:47:43.589810 2016] [:error] [pid 11184:tid 1864] [client ::1:53964] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 24 bytes) in C:\\xampp\\htdocs\\eccube-3.0.10\\vendor\\symfony\\http-kernel\\DataCollector\\DumpDataCollector.php on line 132, referer: http://localhost/eccube-3.0.10/html/index_dev.php/cart 以下、システムのログになります [2016-06-30 09:48:09] eccube.DEBUG: Stored the security token in the session. {"key":"_security_customer"} [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.response" to listener "Silex\EventListener\MiddlewareListener::onKernelResponse". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ResponseListener::onKernelResponse". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.response" to listener "closure". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.response" to listener "closure". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.response" to listener "closure". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.response" to listener "Eccube\EventListener\RequestDumpListener::onResponse". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.response" to listener "Silex\EventListener\LogListener::onKernelResponse". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\Security\Http\RememberMe\ResponseListener::onKernelResponse". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelResponse". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.response" to listener "Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener::onKernelResponse". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.response" to listener "closure". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelFinishRequest". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.finish_request" to listener "Silex\EventListener\LocaleListener::onKernelFinishRequest". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.finish_request" to listener "Symfony\Component\Security\Http\Firewall::onKernelFinishRequest". [] [] [2016-06-30 09:48:09] eccube.DEBUG: KernelEvents::TERMINATE _wdt [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.terminate" to listener "closure". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.terminate" to listener "closure". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.terminate" to listener "closure". [] [] [2016-06-30 09:48:09] eccube.DEBUG: Notified event "kernel.terminate" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelTerminate". [] [] |
blue3 |
投稿日時: 2016/6/30 12:00
対応状況: −−−
|
新米 登録日: 2016/6/24 居住地: 投稿: 9 |
Re: 注文番号について php.iniを編集しメモリ割り当てを増やしてみたのですが
やはり変化ありません。 どなたか、お知恵をお持ちの方がいらっしゃいましたら ご教示いただければ幸いです。 よろしくお願いいたします。 |
yuh |
投稿日時: 2016/6/30 12:42
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1857 |
Re: 注文番号について SELECT COUNT(o.order_number)
FROM dtb_order o WHERE o.order_number = 結合した注文番号 この場合だと全件検索を行うので、 SELECT 1 FROM dtb_order o WHERE o.order_number = 結合した注文番号 LIMIT 1 とかにした方がいいかと思います。 |
blue3 |
投稿日時: 2016/6/30 13:32
対応状況: −−−
|
新米 登録日: 2016/6/24 居住地: 投稿: 9 |
Re: 注文番号について ご助言ありがとうございます。
LIMITのquerybuilderでの記述方法というのはどのようになるのでしょうか?? |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |