バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 商品をカートに入れるとエラーになる

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2020/3/11 10:37
対応状況: 解決済
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1011
商品をカートに入れるとエラーになる
EC-CUBE 4.0.3
最低購入数設定プラグイン
会員ランクプラグイン
まとめ買い価格設定プラグイン

新規のサイト構築で、データ移行プラグインで2系から4系に商品情報を移行しました。
フロントページにデザインコーディングを組み込んでいます。

商品詳細でカートに入れることはでき、続けて同じ商品をカートに入れることもできます。
しかし、別の商品をカートに入れようとすると「カートへの追加に失敗しました。」と表示されます。
このときのログは次のとおりです。

___ *** CRITICAL ERROR *** ==> REQUEST _____________________________________________________________
Uncaught PHP Exception InvalidArgumentException: "Entity has to be managed or scheduled for
removal for single computation Eccube\Entity\CartItem@0000000021b4aad0000000003924814f"; at
/Applications/MAMP/htdocs/test/local/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php line
502

カート内に商品がない状態ならどの商品でもカートに入れることができますが、別の商品をカートに入れることができません。
販売種別はすべて同じ「通常商品」です。
どのような原因が考えられるでしょうか?

ログによると、エラーは次の場所で発生しているようです。

src/Eccube/Service/CartService.php line 284
    protected function restoreCarts($cartItems)
    {
        foreach ($this->getCarts() as $Cart) {
            foreach ($Cart->getCartItems() as $i) {
                $this->entityManager->remove($i);
                $this->entityManager->flush($i);  // ★ここでエラー発生
            }
            $this->entityManager->remove($Cart);
            $this->entityManager->flush($Cart);
        }
        $this->carts = [];
h_tanaka
投稿日時: 2020/3/16 11:56
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1011
Re: 商品をカートに入れるとエラーになる
詳細を追っていったところ、原因がわかりました。
purchaseFlow の validate() で false が返ってきていました。

src/Eccube/Controller/ProductController.php
        // カートへ追加
        $this->cartService->addProduct($addCartData['product_class_id'], $addCartData['quantity']);

        // 明細の正規化
        $Carts = $this->cartService->getCarts();
        foreach ($Carts as $Cart) {
            $result = $this->purchaseFlow->validate($Cart, new PurchaseContext($Cart, $this->getUser()));    // ★ここでfalse
            // 復旧不可のエラーが発生した場合は追加した明細を削除.
            if ($result->hasError()) {
                $this->cartService->removeProduct($addCartData['product_class_id']);    // ★ここでエラー
                foreach ($result->getErrors() as $error) {
                    $errorMessages[] = $error->getMessage();
                }
            }
            foreach ($result->getWarning() as $warning) {
                $errorMessages[] = $warning->getMessage();
            }
        }


データ移行プラグインを用いて2系から4系にデータ移行していたため、配送方法と支払い方法の紐付けが行われていなかったことが原因でした。
この原因の場合、1回目からカートに商品が入るのもおかしい気がしますが。。

purchaseFlow って本当にわかりにくくて難しいですね。
特にエラー発生時にログから追えないのが痛いです。


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は62,561名です
総投稿数は96,380件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
468
2340
4
nanasess
2044
5
yuh
1612
6
umebius
1588
7
red
1404
8
h_tanaka
1011
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 656
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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