Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1つの商品規格に対して2つの在庫情報が登録されてしまい在庫がずれてしまう #6028

Closed
kiy0taka opened this issue Aug 1, 2023 · 2 comments
Labels

Comments

@kiy0taka
Copy link
Contributor

kiy0taka commented Aug 1, 2023

概要(Overview)

在庫を設定している商品規格を商品規格管理画面で外し、再度規格を追加すると在庫情報の dtb_product_stock に同じ商品規格IDに対するレコードが2件できる。

dtb_product_stockを取得するときにはDoctrineが以下のSQLを実行する。

SELECT t0.id               AS id_1,
       t0.stock            AS stock_2,
       t0.create_date      AS create_date_3,
       t0.update_date      AS update_date_4,
       t0.product_class_id AS product_class_id_5,
       t0.creator_id       AS creator_id_6,
       t0.discriminator_type
FROM dtb_product_stock t0
WHERE t0.product_class_id = $1
  AND t0.discriminator_type IN ('productstock')

このSQLではORDER BY句が指定されていないため、複数件ある場合にどの順序で返されるかは保証されない。Doctrine側ではどちらかのレコードを利用するため取得するタイミングで在庫が変わってしまう可能性がある。

再現手順(Procedure)

  1. デフォルト初期インストール状態で商品ID=1の商品規格ごとのdtb_product_stockのデータ
eccube_db=# select s.id, s.product_class_id, s.stock from dtb_product_class c, dtb_product_stock s where c.id = s.product_class_id and c.product_id = 1 order by id;
 id | product_class_id | stock
----+------------------+-------
  1 |                1 |
  2 |                2 |
  3 |                3 |
  4 |                4 |
  5 |                5 |
  6 |                6 |
  7 |                7 |
  8 |                8 |
  9 |                9 |
 10 |               10 |
(10 rows)
  1. 管理画面で商品ID=1の商品規格編集画面に遷移し、チョコ/16mm x 16mmの商品規格(product_class_id=10)の在庫を無制限から100に変更して登録する
eccube_db=# select s.id, s.product_class_id, s.stock from dtb_product_class c, dtb_product_stock s where c.id = s.product_class_id and c.product_id = 1 order by id;
 id | product_class_id | stock
----+------------------+-------
  1 |                1 |
  2 |                2 |
  3 |                3 |
  4 |                4 |
  5 |                5 |
  6 |                6 |
  7 |                7 |
  8 |                8 |
  9 |                9 |
 10 |               10 |   100
(10 rows)
  1. 続けて、チョコ/16mm x 16mmの商品規格(product_class_id=10)のチェックを外して登録する。
eccube_db=# select s.id, s.product_class_id, s.stock from dtb_product_class c, dtb_product_stock s where c.id = s.product_class_id and c.product_id = 1 order by id;
 id | product_class_id | stock
----+------------------+-------
  1 |                1 |
  2 |                2 |
  3 |                3 |
  4 |                4 |
  5 |                5 |
  6 |                6 |
  7 |                7 |
  8 |                8 |
  9 |                9 |
 10 |               10 |   100
(10 rows)
  1. 最後に、チョコ/16mm x 16mmの商品規格(product_class_id=10)のチェックを入れて在庫数10を入力して登録する。
eccube_db=# select s.id, s.product_class_id, s.stock from dtb_product_class c, dtb_product_stock s where c.id = s.product_class_id and c.product_id = 1 order by id;
 id | product_class_id | stock
----+------------------+-------
  1 |                1 |
  2 |                2 |
  3 |                3 |
  4 |                4 |
  5 |                5 |
  6 |                6 |
  7 |                7 |
  8 |                8 |
  9 |                9 |
 10 |               10 |   100
 12 |               10 |    10
(11 rows)

同じ規格ID=10に対して在庫数100と10のレコードができる。

環境(Environment)

EC-CUBE: 4.2.2
PHP: 8.1.13
DB:
PostgresSQL 10.17

@kiy0taka kiy0taka added the bug label Aug 1, 2023
@kiy0taka kiy0taka changed the title 1つの商品規格に対して2件の在庫情報が登録されてしまい在庫がずれてしまう 1つの商品規格に対して2つの在庫情報が登録されてしまい在庫がずれてしまう Aug 1, 2023
@dotani1111
Copy link
Contributor

簡単な再現手順です。
・管理画面>商品規格登録に遷移する
・チョコ16x16(product_class_id=10)の規格を無効化する
・チョコ16x16(product_class_id=10)を在庫10で登録して有効化する
 →在庫がずれる

@dotani1111
Copy link
Contributor

PRマージ済みのためクローズします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants