バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > データベース上のorder_Itemのquantityが更新されない。

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
gk117
投稿日時: 2023/11/15 10:13
対応状況: −−−
新米
登録日: 2023/11/15
居住地:
投稿: 3
データベース上のorder_Itemのquantityが更新されない。
[EC-CUBE] EC-CUBEのバージョン 4.0.5
[レンタルサーバ] AWS EC2
[OS] MacOS Monterey 12.6.7
[PHP] PHP Version 7.4.11
[データベース] MySQL 5.7
[現象] 「StockMultipleValidator.php」のカスタマイズにて、在庫数以上の商品を購入しようとした場合、
配布数(quantity)を在庫数に変更してエラーを出さず続行するという処理に変更しようとしていいます。

その際に、setQuantityで該当の商品の配布数を変更し、
処理の最後にentityManager->flush()でDBへの永続化をしようとしているのですが、
購入完了後に orderitem のテーブルを確認すると、配布数が変更されていないことがわかりました。

どのようにすれば永続化が正しく行われるでしょうか?
勉強不足で大変恐縮ですが、ご教示いただけましたら幸いです。

※setQuantityの前後でログ出力をして、
OrderItemエンティティ内でquantityが変更されていることは確認しました。

-----------ソースコード-----------
foreach ($OrderItemsByProductClass as $id => $Items) {
/** @var ProductClass $ProductClass */
$ProductClass = $this->productClassRepository->find($id);
if ($ProductClass->isStockUnlimited()) {
continue;
}
$stock = $ProductClass->getStock();

$isZero = false;
$isZeroBonus = false;
if ($stock == 0) {
foreach ($Items as $Item) {
$Item->setQuantity($stock);
if ($Item->isBonus()) {
$isZeroBonus = true;
} else {
$isZero = true;
}
}
if ($isZero) {
$this->throwInvalidItemException('front.shopping.out_of_stock_zero', $ProductClass, true);
} elseif ($isZeroBonus) {
continue;
}
}
$isOver = false;
$isOverBonus = false;
foreach ($Items as $Item) {
if ($stock - $Item->getQuantity() >= 0) {
$stock = $stock - $Item->getQuantity();
} else {
$Item->setQuantity($stock);
$stock = 0;
if ($Item->isBonus()) {
$isOverBonus = true;
} else {
$isOver = true;
}
}
}
if ($isOver) {
$this->throwInvalidItemException('front.shopping.out_of_stock', $ProductClass, true);
} elseif ($isOverBonus) {
//nothing
}
$Items->entityManager->flush();
}
-----------ソースコード-----------
yuh
投稿日時: 2023/11/15 10:47
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1851
Re: データベース上のorder_Itemのquantityが更新されない。
persistしてないのが原因じゃないですか?


----------------


http://ec-lab.net/

gk117
投稿日時: 2023/11/15 10:54
対応状況: −−−
新米
登録日: 2023/11/15
居住地:
投稿: 3
Re: データベース上のorder_Itemのquantityが更新されない。
ご返信ありがとうございます。
記載が足りておらず申し訳ありません。
ソースコードには載っていませんが、flush()処理の直前に

$this->entityManager->persist($Items)

を記載して試してみましたが、結果は変わらずでした。
mcontact
投稿日時: 2023/11/15 12:44
対応状況: −−−
登録日: 2022/1/22
居住地:
投稿: 1465
Re: データベース上のorder_Itemのquantityが更新されない。
コードがとても見辛いです。
コードは、適切にインデントを入れてコードタグで括ってください。

foreach ($Items as $Item) {
if ($stock - $Item->getQuantity() >= 0) {
$stock = $stock - $Item->getQuantity();
} else {
$Item->setQuantity($stock);
$stock = 0;
if ($Item->isBonus()) {
$isOverBonus = true;
} else {
$isOver = true;
}
}
}

この辺りのコードで、$Itemsオブジェクトを$Itemにしているのに
$Items->entityManager->flush();でflushしているのおかしいと思うのと、$Items->entityManager->flush();は$this->entityManager->flush();だと思うのですが…


----------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EC-CUBEインテグレートパートナー【ゴールド】ランク
M&I Works
URL: https://miworks.biz/
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

gk117
投稿日時: 2023/11/16 19:15
対応状況: 解決済
新米
登録日: 2023/11/15
居住地:
投稿: 3
Re: データベース上のorder_Itemのquantityが更新されない。
こちらの件、自己解決いたしました。

「StockMultipleValidator」 での永続化ではそもそも問題があり、
実際に在庫数の計算・永続化を行なっている「StockReduceProcessor」
にて該当処理を記述することで正常に動作しました。

初の質問で意色々と至らぬ点が多く申し訳ありませんでした。
頂いたご指摘を踏まえて、次回以降は内容をわかりやすくするように気をつけます。

みなさま、ご協力いただきありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は93,426名です
総投稿数は111,050件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2315
5
umebius
2085
6
yuh
1851
7
h_tanaka
1756
8
red
1574
9
mcontact
1465
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
804
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

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

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