バージョン選択

フォーラム

メニュー

オンライン状況

46 人のユーザが現在オンラインです。 (21 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 46
もっと...

サイト内検索

質問 > その他 > 注文番号について

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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: 注文番号について

先ほどの引用:

// TODO DBを確認し、同じ注文番号がないこと。


ここの部分を以下のように記載してみましたがエラーとなってしまいました。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
居住地: 大阪
投稿: 1664
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での記述方法というのはどのようになるのでしょうか??
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン



統計情報

総メンバー数は74,779名です
総投稿数は104,239件です

投稿数ランキング

1
seasoft
7333
2
468
3217
3
AMUAMU
2712
4
nanasess
2202
5
umebius
2085
6
yuh
1664
7
red
1525
8
h_tanaka
1189
9
tsuji
942
10
fukap
907
11
shutta
835
12
tao_s
794
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.