質問 > 管理機能 > データベース上のorder_Itemのquantityが更新されない。 |
管理機能
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
gk117 |
投稿日時: 2023/11/16 19:15
対応状況: 解決済
|
新米 登録日: 2023/11/15 居住地: 投稿: 3 |
Re: データベース上のorder_Itemのquantityが更新されない。 こちらの件、自己解決いたしました。
「StockMultipleValidator」 での永続化ではそもそも問題があり、 実際に在庫数の計算・永続化を行なっている「StockReduceProcessor」 にて該当処理を記述することで正常に動作しました。 初の質問で意色々と至らぬ点が多く申し訳ありませんでした。 頂いたご指摘を踏まえて、次回以降は内容をわかりやすくするように気をつけます。 みなさま、ご協力いただきありがとうございました。 |
mcontact |
投稿日時: 2023/11/15 12:44
対応状況: −−−
|
神 登録日: 2022/1/22 居住地: 投稿: 1499 |
Re: データベース上のorder_Itemのquantityが更新されない。 コードがとても見辛いです。
コードは、適切にインデントを入れてコードタグで括ってください。
この辺りのコードで、$Itemsオブジェクトを$Itemにしているのに $Items->entityManager->flush();でflushしているのおかしいと思うのと、$Items->entityManager->flush();は$this->entityManager->flush();だと思うのですが…
|
gk117 |
投稿日時: 2023/11/15 10:54
対応状況: −−−
|
新米 登録日: 2023/11/15 居住地: 投稿: 3 |
Re: データベース上のorder_Itemのquantityが更新されない。 ご返信ありがとうございます。
記載が足りておらず申し訳ありません。 ソースコードには載っていませんが、flush()処理の直前に $this->entityManager->persist($Items) を記載して試してみましたが、結果は変わらずでした。 |
yuh |
投稿日時: 2023/11/15 10:47
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1877 |
Re: データベース上のorder_Itemのquantityが更新されない。 persistしてないのが原因じゃないですか?
|
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(); } -----------ソースコード----------- |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |