バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > その他 > 「購入処理中」の受注情報を削除したい

その他

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
h_tanaka
投稿日時: 2024/6/25 17:38
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1938
「購入処理中」の受注情報を削除したい
EC-CUBE 4.0.5
PHP 7.4.16

古い「購入処理中」の受注情報を削除したいです。

Command ファイルを作成して、次のように実装しました。
ローカルMacOSのMAMP環境では問題なく実行できたのですが、同じプロジェクトのさくらクラウドのLinux環境で実行すると、FKエラーが発生してしまいます。
なぜだかわかりますでしょうか?

app/Customize/Command/OrderDeleteCommand.php

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $io = new SymfonyStyle($input, $output);

        // タイムアウトを無効にする.
        set_time_limit(0);
        ini_set('memory_limit', '8G');

        $this->entityManager->getConfiguration()->setSQLLogger(null);
        // $this->entityManager->getConnection()->beginTransaction();

        try {
            $loop_count_success = 0;

            // 更新日時が3ヶ月以上前の「購入処理中」「決済処理中」の受注データ            
            $qb = $this->orderRepository->createQueryBuilder('o')
                ->select('o, s, oi')
                ->leftJoin('o.OrderItems', 'oi')
                ->innerJoin('o.Shippings', 's');

            $statuses = $this->orderStatusRepository->findBy(['id' => [OrderStatus::PROCESSING, OrderStatus::PENDING]]);
            $qb->andWhere($qb->expr()->in('o.OrderStatus', ':status'))
                ->setParameter('status', $statuses);

            $update_date_end = (new \DateTime())->modify('-'.$this->eccubeConfig['eccube_order_delete_days'].' days')->modify('+1 days');
            $qb->andWhere('o.update_date < :update_date_end')
                ->setParameter('update_date_end', $update_date_end);

            $qb->orderBy('o.id', 'ASC');
            
            $qb->setMaxResults(20); // メモリーリーク対策

            $Orders = $qb->getQuery()->getResult();
            while (count($Orders) > 0) {
                foreach ($Orders as $Order) {
                    $order_id = $Order->getId();
                    // $YamatoOrder = $Order->getYamatoOrder();
                    // if ($YamatoOrder) {
                    //     $Order->setYamatoOrder(null);    // Call to a member function getMemo03() on null エラーになる
                    //     $this->entityManager->remove($YamatoOrder);
                    // }
                    $MailHistories = $Order->getMailHistories();
                    if ($MailHistories && count($MailHistories) > 0) {
                        foreach ($Order->getMailHistories() as $MailHistory) {
                            $Order->removeMailHistory($MailHistory);
                            $this->entityManager->remove($MailHistory);
                        }
                    }
                    foreach ($Order->getShippings() as $Shipping) {
                        foreach ($Shipping->getOrderItems() as $OrderItem) {
                            $Shipping->removeOrderItem($OrderItem);
                            $this->entityManager->remove($OrderItem);
                        }
                        $Order->removeShipping($Shipping);
                        $this->entityManager->remove($Shipping);
                    }
                    $this->entityManager->remove($Order);
                    $this->entityManager->flush();

                    log_info('受注情報削除', ['order_id' => $order_id]);
                    $io->success(date('Y-m-d H:i:s',time()) . ' (order_id:' . $order_id . ')');

                    $loop_count_success++;
                }

                $Orders = $qb->getQuery()->getResult();
                break;
            }
            // $this->entityManager->flush();
            // $this->entityManager->getConnection()->commit();
            $io->success(date('Y-m-d H:i:s',time()) . ' (count:' . $loop_count_success . ')');
        } catch (\Exception $e) {
            // $this->entityManager->getConnection()->rollback();
            $io->error($e->getMessage());
        }
    }


[ERROR] An exception occurred while executing 'DELETE FROM dtb_order WHERE id = ?' with params
[400031]:

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent
row: a foreign key constraint fails (`ec`.`dtb_order_item`, CONSTRAINT
`FK_A0C8C3ED8D9F6D38` FOREIGN KEY (`order_id`) REFERENCES `dtb_order` (`id`))
フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
 » 「購入処理中」の受注情報を削除したい h_tanaka 2024/6/25 17:38
     Re: 「購入処理中」の受注情報を削除したい tattsu 2024/6/25 17:40
       Re: 「購入処理中」の受注情報を削除したい h_tanaka 2024/6/25 17:45
         Re: 「購入処理中」の受注情報を削除したい h_tanaka 2024/6/27 18:27
           Re: 「購入処理中」の受注情報を削除したい h_tanaka 2024/6/28 11:29
             Re: 「購入処理中」の受注情報を削除したい h_tanaka 2024/6/28 12:51

 



ログイン


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

統計情報

総メンバー数は100,613名です
総投稿数は112,222件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2327
5
umebius
2085
6
h_tanaka
1938
7
yuh
1899
8
mcontact
1632
9
red
1579
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
805
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
balisys
502


ネットショップの壺

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

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